下载工作台
前端开发入门

模块化与工程化入门

试读上半部分 · 解锁后可读全文

第 13 章 · 模块化与工程化入门

本章目标:用 npm、Viteacademy-demo 从「多个 HTML 文件夹」升级为可开发、可构建、可部署的现代前端工程,理解目录结构、环境变量与静态站发布流程。

前置:第 11~12 章;本机安装 Node.js 18+。


13.1 为什么需要工程化

手写多页面工程化(Vite)
无热更新,改代码需手动刷新HMR 毫秒级反馈
脚本全局污染ES Module 作用域隔离
无法 Tree Shaking按需打包,体积更小
环境配置写死在代码里.env 分环境注入
上线前手动压缩build 一键产出 dist/
行业案例 · 贤紫优选商城:学员作品站早期为静态 HTML 合集,维护 40+ 页面后样式不一致、脚本重复率达 60%。统一迁入 Vite monorepo 后,共享组件库 + CI 自动部署至对象存储,发布从 2h 人工 FTP 变为 3min 流水线。

13.2 初始化 academy-demo 工程

cd academy-demo
npm create vite@latest . -- --template vanilla
npm install
npm run dev

生成结构:

academy-demo/
├── index.html          # 入口 HTML(Vite 根)
├── package.json
├── vite.config.js
├── public/             # 原样复制到 dist 根(favicon、mock)
│   └── mock/
├── src/
│   ├── main.js         # 入口脚本
│   ├── style.css
│   ├── api/
│   │   └── client.js
│   ├── pages/
│   │   ├── home.js
│   │   └── todo.js
│   └── components/
│       └── course-card.js
└── .env.development
目录职责
public/不参与打包的静态资源
src/源码,ES Module
dist/npm run build 产出(勿提交 Git)
node_modules/依赖(勿提交 Git)

13.3 package.json 与 npm

{
  "name": "academy-demo",
  "version": "1.0.0",
  "type": "module",
  "scripts": {
    "dev": "vite",
    "build": "vite build",
    "preview": "vite preview"
  },
  "devDependencies": {
    "vite": "^6.0.0"
  }
}
命令作用
npm install安装 package.json 依赖
npm install dayjs添加生产依赖
npm install -D eslint添加开发依赖
npm run dev启动开发服务器
npm run build生产构建
npm run preview本地预览 dist

版本锁定:提交 package-lock.json,保证团队依赖一致。


13.4 Vite 配置要点

// vite.config.js
import { defineConfig, loadEnv } from 'vite';
import { resolve } from 'path';

export default defineConfig(({ mode }) => {
  const env = loadEnv(mode, process.cwd(), '');

  return {
    root: '.',
    base: env.VITE_BASE_PATH || '/',
    server: {
      port: 5173,
      open: true,
      proxy: {
        '/api': {
          target: env.VITE_API_PROXY || 'http://127.0.0.1:8000',
          changeOrigin: true,
        },
      },
    },
    build: {
      outDir: 'dist',
      assetsDir: 'assets',
      sourcemap: true,
      rollupOptions: {
        input: {
          main: resolve(__dirname, 'index.html'),
          todo: resolve(__dirname, 'todo.html'),
        },
      },
    },
  };
});
配置项说明
base部署子路径,如 /academy-demo/
server.proxy开发环境 API 转发
build.outDir构建输出目录
rollupOptions.input多页面入口

13.5 环境变量

Vite 仅暴露以 VITE_ 开头的变量到客户端:

# .env.development
VITE_API_BASE=/api/academy
VITE_API_PROXY=http://127.0.0.1:8000
VITE_APP_TITLE=academy-demo 开发环境

# .env.production
VITE_API_BASE=https://mall.example.com/api/academy
VITE_APP_TITLE=贤紫技术学院
VITE_BASE_PATH=/academy-demo/
// src/api/client.js

以下内容需解锁后阅读

试读已结束。解锁本章 ¥5.00,或开通年度会员畅读全部教程。
年度会员 ¥199.00/年; 小紫 AI 工作台有效会员 ¥99.00/年

正文仅在服务端鉴权后下发,未付费无法获取下半部分内容。