简体中文 繁體中文 English 日本語 Deutsch 한국 사람 بالعربية TÜRKÇE português คนไทย Français

站内搜索

搜索

活动公告

11-02 12:46
10-23 09:32
通知:本站资源由网友上传分享,如有违规等问题请到版务模块进行投诉,将及时处理!
10-23 09:31
10-23 09:28
通知:签到时间调整为每日4:00(东八区)
10-23 09:26

深入浅出Vue CLI项目搭建从基础配置到高级应用技巧

3万

主题

424

科技点

3万

积分

大区版主

木柜子打湿

积分
31917

三倍冰淇淋无人之境【一阶】财Doro小樱(小丑装)立华奏以外的星空【二阶】⑨的冰沙

发表于 2025-9-21 02:40:02 | 显示全部楼层 |阅读模式 [标记阅至此楼]

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
1. Vue CLI简介和安装

Vue CLI是Vue.js官方提供的标准工具,用于快速搭建Vue.js项目。它提供了一个零配置的原型开发环境,同时也是一个可扩展的、功能丰富的Vue.js开发工具链。

1.1 Vue CLI的优势

• 零配置快速原型开发:只需一个命令即可创建并运行一个Vue项目
• 丰富的官方插件集合:集成最佳实践,提供各种插件
• 完全可配置的构建系统:基于webpack,但封装了复杂配置
• 图形化项目管理界面:通过vue ui命令启动
• 现代化开发体验:支持热重载、保存时lint等功能

1.2 安装Vue CLI

在安装Vue CLI之前,确保你的计算机上已经安装了Node.js(版本8.9或更高,推荐10.13+)。可以通过在终端中运行以下命令来检查Node.js版本:
  1. node -v
复制代码

安装Vue CLI使用npm(Node包管理器):
  1. npm install -g @vue/cli
复制代码

或者使用yarn:
  1. yarn global add @vue/cli
复制代码

安装完成后,可以通过以下命令检查Vue CLI版本:
  1. vue --version
复制代码

如果看到版本号,说明Vue CLI安装成功。

2. 创建第一个Vue项目

使用Vue CLI创建新项目非常简单,只需运行以下命令:
  1. vue create my-first-vue-project
复制代码

这里的my-first-vue-project是项目名称,可以根据需要更改。

执行命令后,Vue CLI会提示你选择预设配置:
  1. Vue CLI v4.5.13
  2. ? Please pick a preset: (Use arrow keys)
  3. ❯ default (babel, eslint)
  4.   Manually select features
复制代码

• default:默认预设,包含Babel和ESLint
• Manually select features:手动选择功能,可以自定义项目配置

选择默认预设会直接创建项目,而选择手动选择功能则会进入更详细的配置流程。

2.1 手动选择功能配置

选择”Manually select features”后,会出现以下选项:
  1. ? Check the features needed for your project: (Press <space> to select, <a> to toggle all, <i> to invert selection)
  2. ❯◉ Babel
  3. ◯ TypeScript
  4. ◯ Progressive Web App (PWA) Support
  5. ◯ Router
  6. ◯ Vuex
  7. ◯ CSS Pre-processors
  8. ◉ Linter / Formatter
  9. ◯ Unit Testing
  10. ◯ E2E Testing
复制代码

使用空格键选择需要的功能:

• Babel:用于将ES6+代码转换为向后兼容的JavaScript版本
• TypeScript:JavaScript的超集,添加了静态类型检查
• PWA Support:渐进式Web应用支持
• Router:Vue Router,官方路由管理器
• Vuex:Vue状态管理库
• CSS Pre-processors:CSS预处理器(如Sass、Less等)
• Linter / Formatter:代码风格检查和格式化
• Unit Testing:单元测试
• E2E Testing:端到端测试

选择完功能后,会针对每个功能进行更详细的配置,例如选择Vue版本、路由模式、CSS预处理器、linter配置等。

2.2 项目创建过程

配置完成后,Vue CLI会开始创建项目,安装所需的依赖。这个过程可能需要几分钟时间,具体取决于网络速度和所选功能。

创建完成后,进入项目目录并启动开发服务器:
  1. cd my-first-vue-project
  2. npm run serve
复制代码

或者使用yarn:
  1. cd my-first-vue-project
  2. yarn serve
复制代码

启动成功后,终端会显示访问地址,通常是:
  1. App running at:
  2. - Local:   http://localhost:8080/
  3. - Network: http://192.168.x.x:8080/
复制代码

在浏览器中打开显示的地址,即可看到Vue项目的默认页面。

3. 项目结构解析

创建的Vue项目包含以下主要文件和目录:
  1. my-first-vue-project/
  2. ├── node_modules/          # 项目依赖
  3. ├── public/                # 静态资源
  4. │   ├── favicon.ico        # 网站图标
  5. │   └── index.html         # HTML模板
  6. ├── src/                   # 源代码
  7. │   ├── assets/            # 资源文件(图片、样式等)
  8. │   ├── components/        # Vue组件
  9. │   ├── views/             # 页面视图(如果选择了Router)
  10. │   ├── router/            # 路由配置(如果选择了Router)
  11. │   ├── store/             # Vuex状态管理(如果选择了Vuex)
  12. │   ├── App.vue            # 根组件
  13. │   └── main.js            # 入口文件
  14. ├── .gitignore             # Git忽略文件
  15. ├── babel.config.js        # Babel配置
  16. ├── package.json           # 项目配置和依赖
  17. ├── package-lock.json      # 依赖版本锁定文件
  18. ├── README.md              # 项目说明文档
  19. └── vue.config.js          # Vue CLI配置(可选)
复制代码

3.1 主要文件解析

这是项目的HTML模板文件,Vue CLI会基于此文件生成最终的HTML文件。其中最重要的是:
  1. <div id="app"></div>
复制代码

这是Vue应用的挂载点,Vue实例将挂载到这个DOM元素上。

这是应用的入口文件,负责创建Vue实例并挂载到DOM:
  1. import Vue from 'vue'
  2. import App from './App.vue'
  3. Vue.config.productionTip = false
  4. new Vue({
  5.   render: h => h(App)
  6. }).$mount('#app')
复制代码

如果选择了Router和Vuex,入口文件会包含相应的配置:
  1. import Vue from 'vue'
  2. import App from './App.vue'
  3. import router from './router'
  4. import store from './store'
  5. Vue.config.productionTip = false
  6. new Vue({
  7.   router,
  8.   store,
  9.   render: h => h(App)
  10. }).$mount('#app')
复制代码

这是应用的根组件,所有其他组件都会在这个组件下渲染:
  1. <template>
  2.   <div id="app">
  3.     <img alt="Vue logo" src="./assets/logo.png">
  4.     <HelloWorld msg="Welcome to Your Vue.js App"/>
  5.   </div>
  6. </template>
  7. <script>
  8. import HelloWorld from './components/HelloWorld.vue'
  9. export default {
  10.   name: 'App',
  11.   components: {
  12.     HelloWorld
  13.   }
  14. }
  15. </script>
  16. <style>
  17. #app {
  18.   font-family: Avenir, Helvetica, Arial, sans-serif;
  19.   -webkit-font-smoothing: antialiased;
  20.   -moz-osx-font-smoothing: grayscale;
  21.   text-align: center;
  22.   color: #2c3e50;
  23.   margin-top: 60px;
  24. }
  25. </style>
复制代码

这个文件包含了项目的元数据和依赖信息:
  1. {
  2.   "name": "my-first-vue-project",
  3.   "version": "0.1.0",
  4.   "private": true,
  5.   "scripts": {
  6.     "serve": "vue-cli-service serve",
  7.     "build": "vue-cli-service build",
  8.     "lint": "vue-cli-service lint"
  9.   },
  10.   "dependencies": {
  11.     "core-js": "^3.6.5",
  12.     "vue": "^2.6.11"
  13.   },
  14.   "devDependencies": {
  15.     "@vue/cli-plugin-babel": "~4.5.0",
  16.     "@vue/cli-plugin-eslint": "~4.5.0",
  17.     "@vue/cli-service": "~4.5.0",
  18.     "babel-eslint": "^10.1.0",
  19.     "eslint": "^6.7.2",
  20.     "eslint-plugin-vue": "^6.2.2",
  21.     "vue-template-compiler": "^2.6.11"
  22.   }
  23. }
复制代码

其中,scripts部分定义了可用的npm命令:

• serve:启动开发服务器
• build:构建生产版本
• lint:运行代码检查

4. 基础配置详解

Vue CLI提供了丰富的配置选项,让我们可以自定义项目的各个方面。

4.1 vue.config.js配置

Vue CLI项目可以通过在根目录创建vue.config.js文件来自定义配置。这个文件会导出一个包含配置选项的对象:
  1. module.exports = {
  2.   // 配置选项
  3. }
复制代码
  1. module.exports = {
  2.   // 部署应用包时的基本URL
  3.   publicPath: process.env.NODE_ENV === 'production' ? '/production-sub-path/' : '/',
  4.   
  5.   // 输出文件目录
  6.   outputDir: 'dist',
  7.   
  8.   // 放置静态资源的目录
  9.   assetsDir: 'static',
  10.   
  11.   // 生产环境的source map
  12.   productionSourceMap: false,
  13.   
  14.   // 开发服务器配置
  15.   devServer: {
  16.     port: 8080,
  17.     open: true,
  18.     proxy: {
  19.       '/api': {
  20.         target: 'http://backend-api.com',
  21.         changeOrigin: true,
  22.         pathRewrite: {
  23.           '^/api': ''
  24.         }
  25.       }
  26.     }
  27.   },
  28.   
  29.   // CSS相关配置
  30.   css: {
  31.     loaderOptions: {
  32.       sass: {
  33.         additionalData: `@import "@/assets/styles/variables.scss";`
  34.       }
  35.     }
  36.   }
  37. }
复制代码

• publicPath:部署应用包时的基本URL,默认为’/‘。如果你的应用被部署在一个子路径上,你需要用这个选项指定这个子路径。
• outputDir:生产环境构建文件的目录,默认为’dist’。
• assetsDir:放置生成的静态资源的目录,默认为”。
• productionSourceMap:生产环境是否生成source map,默认为true。设置为false可以加速生产环境构建。
• devServer:开发服务器配置,可以设置端口、自动打开浏览器、代理等。
• css:CSS相关配置,可以配置预处理器选项等。

4.2 环境变量和模式

Vue CLI使用环境变量来管理不同环境下的配置。默认情况下,一个Vue CLI项目有三个模式:

• development:用于vue-cli-service serve
• test:用于vue-cli-service test:unit
• production:用于vue-cli-service build和vue-cli-service test:e2e

可以通过.env文件来配置环境变量:
  1. .env                # 在所有环境中被载入
  2. .env.local          # 在所有环境中被载入,但会被git忽略
  3. .env.[mode]         # 只在指定模式中被载入
  4. .env.[mode].local   # 只在指定模式中被载入,但会被git忽略
复制代码

例如,创建一个.env.development文件:
  1. VUE_APP_API_BASE_URL=http://localhost:3000/api
复制代码

然后在代码中可以通过process.env.VUE_APP_API_BASE_URL访问这个变量:
  1. const apiUrl = process.env.VUE_APP_API_BASE_URL
复制代码

注意:只有以VUE_APP_开头的变量才会被嵌入到客户端侧的包中。

4.3 Babel配置

Vue CLI使用Babel来转换JavaScript代码,确保在旧版浏览器中也能正常运行。Babel的配置可以在babel.config.js文件中进行:
  1. module.exports = {
  2.   presets: [
  3.     '@vue/cli-plugin-babel/preset'
  4.   ],
  5.   plugins: [
  6.     // 添加额外的Babel插件
  7.   ]
  8. }
复制代码

如果需要支持特定的浏览器,可以在package.json中添加browserslist字段:
  1. "browserslist": [
  2.   "> 1%",
  3.   "last 2 versions",
  4.   "not dead"
  5. ]
复制代码

4.4 ESLint配置

ESLint是一个代码检查工具,可以帮助我们保持代码风格一致并发现潜在问题。ESLint的配置可以在项目根目录的.eslintrc.js文件中进行:
  1. module.exports = {
  2.   root: true,
  3.   env: {
  4.     node: true
  5.   },
  6.   extends: [
  7.     'plugin:vue/essential',
  8.     'eslint:recommended'
  9.   ],
  10.   parserOptions: {
  11.     parser: 'babel-eslint'
  12.   },
  13.   rules: {
  14.     'no-console': process.env.NODE_ENV === 'production' ? 'warn' : 'off',
  15.     'no-debugger': process.env.NODE_ENV === 'production' ? 'warn' : 'off',
  16.     // 自定义规则
  17.     'vue/no-unused-components': 'warn',
  18.     'vue/no-unused-vars': 'warn'
  19.   }
  20. }
复制代码

5. 开发环境配置

开发环境的配置对于提高开发效率至关重要。Vue CLI提供了丰富的开发环境配置选项。

5.1 热重载

Vue CLI内置了热重载功能,当你修改代码并保存时,浏览器会自动刷新并应用更改,无需手动刷新页面。这个功能默认启用,无需额外配置。

5.2 开发服务器配置

开发服务器的配置可以在vue.config.js中的devServer选项中设置:
  1. module.exports = {
  2.   devServer: {
  3.     // 服务器端口号
  4.     port: 8080,
  5.    
  6.     // 服务器启动后自动打开浏览器
  7.     open: true,
  8.    
  9.     // 启用热重载
  10.     hot: true,
  11.    
  12.     // 在浏览器中显示编译错误
  13.     overlay: {
  14.       warnings: true,
  15.       errors: true
  16.     },
  17.    
  18.     // 代理配置
  19.     proxy: {
  20.       '/api': {
  21.         target: 'http://backend-api.com',
  22.         changeOrigin: true,
  23.         pathRewrite: {
  24.           '^/api': ''
  25.         }
  26.       }
  27.     }
  28.   }
  29. }
复制代码

5.3 Source Map配置

Source Map可以帮助我们在调试时定位到原始代码,而不是编译后的代码。在开发环境中,Source Map默认启用。如果需要自定义,可以在vue.config.js中配置:
  1. module.exports = {
  2.   configureWebpack: {
  3.     devtool: 'eval-source-map'
  4.   }
  5. }
复制代码

5.4 开发环境插件

Vue CLI提供了许多有用的开发环境插件,可以帮助我们提高开发效率。

Vue DevTools是一个浏览器扩展,可以帮助我们调试Vue应用。它提供了一个检查组件层次结构、查看组件状态、追踪事件等功能。

安装方法:

• Chrome:https://chrome.google.com/webstore/detail/vuejs-devtools/nhdogjmejiglipccpnnnanhbledajbpd
• Firefox:https://addons.mozilla.org/en-US/firefox/addon/vue-js-devtools/

在编辑器中安装ESLint插件可以实时显示代码问题,帮助我们保持代码质量。

• VSCode: ESLint插件
• WebStorm: 内置ESLint支持

6. 生产环境配置

生产环境的配置主要关注性能优化、代码分割和资源管理等方面。

6.1 构建优化

Vue CLI默认为生产环境进行了一系列优化,包括:

• 代码压缩
• 代码分割
• 静态资源优化
• Source Map生成控制

这些优化可以通过vue.config.js进行自定义:
  1. module.exports = {
  2.   // 生产环境是否生成source map
  3.   productionSourceMap: false,
  4.   
  5.   // 配置webpack
  6.   configureWebpack: {
  7.     performance: {
  8.       hints: 'warning',
  9.       // 入口起点的最大体积
  10.       maxEntrypointSize: 512000,
  11.       // 生成文件的最大体积
  12.       maxAssetSize: 512000
  13.     }
  14.   },
  15.   
  16.   // 链式webpack配置
  17.   chainWebpack: config => {
  18.     // 移除 prefetch 插件
  19.     config.plugins.delete('prefetch')
  20.    
  21.     // 压缩代码
  22.     if (process.env.NODE_ENV === 'production') {
  23.       config.plugin('compression')
  24.         .use(require('compression-webpack-plugin'), [{
  25.           algorithm: 'gzip',
  26.           test: /\.(js|css|html|svg)$/,
  27.           threshold: 10240,
  28.           minRatio: 0.8
  29.         }])
  30.     }
  31.   }
  32. }
复制代码

6.2 代码分割

代码分割是优化大型应用加载性能的重要手段。Vue CLI默认会为你的代码进行分割,但你也可以通过动态导入进一步优化:
  1. // 路由懒加载
  2. const routes = [
  3.   {
  4.     path: '/about',
  5.     name: 'About',
  6.     component: () => import(/* webpackChunkName: "about" */ '../views/About.vue')
  7.   }
  8. ]
  9. // 组件懒加载
  10. export default {
  11.   components: {
  12.     'MyComponent': () => import('./MyComponent.vue')
  13.   }
  14. }
复制代码

6.3 静态资源处理

Vue CLI对静态资源的处理遵循以下规则:

• 放在public目录中的文件会被原样复制到输出目录
• 放在src/assets目录中的文件会被webpack处理

对于较大的静态资源,可以考虑使用CDN:
  1. module.exports = {
  2.   chainWebpack: config => {
  3.     if (process.env.NODE_ENV === 'production') {
  4.       config.plugin('html')
  5.         .tap(args => {
  6.           args[0].cdn = {
  7.             css: [
  8.               'https://cdn.example.com/some.css'
  9.             ],
  10.             js: [
  11.               'https://cdn.example.com/some.js'
  12.             ]
  13.           }
  14.           return args
  15.         })
  16.     }
  17.   }
  18. }
复制代码

然后在public/index.html中使用:
  1. <% for (var i in htmlWebpackPlugin.options.cdn && htmlWebpackPlugin.options.cdn.css) { %>
  2.   <link href="<%= htmlWebpackPlugin.options.cdn.css[i] %>" rel="preload" as="style">
  3.   <link href="<%= htmlWebpackPlugin.options.cdn.css[i] %>" rel="stylesheet">
  4. <% } %>
  5. <% for (var i in htmlWebpackPlugin.options.cdn && htmlWebpackPlugin.options.cdn.js) { %>
  6.   <link href="<%= htmlWebpackPlugin.options.cdn.js[i] %>" rel="preload" as="script">
  7. <% } %>
复制代码

6.4 环境变量配置

生产环境通常需要特定的环境变量,可以通过.env.production文件配置:
  1. VUE_APP_API_BASE_URL=https://api.production.com
  2. VUE_APP_TITLE=My App
复制代码

然后在代码中通过process.env访问:
  1. const apiUrl = process.env.VUE_APP_API_BASE_URL
  2. const title = process.env.VUE_APP_TITLE
复制代码

7. 插件系统使用

Vue CLI的插件系统是其强大功能的核心,通过插件可以轻松扩展项目功能。

7.1 官方插件

Vue CLI提供了许多官方插件,可以通过以下命令安装:
  1. vue add @vue/cli-plugin-<plugin-name>
复制代码

例如,添加TypeScript支持:
  1. vue add typescript
复制代码

添加PWA支持:
  1. vue add pwa
复制代码

7.2 第三方插件

除了官方插件,还有许多第三方插件可供使用。例如,添加Element UI组件库:
  1. vue add element
复制代码

7.3 插件配置

大多数插件都提供配置选项,可以在vue.config.js中进行配置:
  1. module.exports = {
  2.   pluginOptions: {
  3.     // 插件配置
  4.   }
  5. }
复制代码

例如,配置Element UI:
  1. module.exports = {
  2.   pluginOptions: {
  3.     element: {
  4.       size: 'small',
  5.       zIndex: 3000
  6.     }
  7.   }
  8. }
复制代码

7.4 自定义插件

你也可以创建自己的Vue CLI插件。一个基本的插件结构如下:
  1. my-plugin/
  2. ├── generator.js  # 生成器(用于创建文件)
  3. ├── index.js      # 服务插件
  4. ├── prompts.js    # 交互提示
  5. └── package.json  # 插件元数据
复制代码

例如,创建一个简单的插件:
  1. // index.js
  2. module.exports = (api, options) => {
  3.   // 修改webpack配置
  4.   api.chainWebpack(webpackConfig => {
  5.     webpackConfig.module
  6.       .rule('my-rule')
  7.       .test(/\.my$/)
  8.       .use('my-loader')
  9.       .loader('my-loader')
  10.   })
  11. }
复制代码

8. 自定义配置

虽然Vue CLI提供了许多默认配置,但有时我们需要更深入地自定义项目配置。

8.1 webpack配置

Vue CLI封装了webpack的复杂性,但仍然允许我们通过configureWebpack或chainWebpack选项来自定义webpack配置。

configureWebpack选项可以是一个对象或一个函数:
  1. // 对象形式
  2. module.exports = {
  3.   configureWebpack: {
  4.     plugins: [
  5.       new MyAwesomeWebpackPlugin()
  6.     ]
  7.   }
  8. }
  9. // 函数形式
  10. module.exports = {
  11.   configureWebpack: config => {
  12.     if (process.env.NODE_ENV === 'production') {
  13.       // 生产环境特定配置
  14.       config.plugins.push(new MyProductionWebpackPlugin())
  15.     } else {
  16.       // 开发环境特定配置
  17.       config.plugins.push(new MyDevelopmentWebpackPlugin())
  18.     }
  19.   }
  20. }
复制代码

chainWebpack选项允许我们基于webpack-chain进行更细粒度的配置:
  1. module.exports = {
  2.   chainWebpack: config => {
  3.     // 添加别名
  4.     config.resolve.alias.set('@', resolve('src'))
  5.    
  6.     // 修改插件选项
  7.     config.plugin('preload').tap(options => {
  8.       options[0].include = 'all'
  9.       return options
  10.     })
  11.    
  12.     // 删除插件
  13.     config.plugins.delete('prefetch')
  14.   }
  15. }
复制代码

8.2 CSS配置

Vue CLI支持CSS预处理器,如Sass、Less和Stylus。可以通过vue.config.js配置CSS相关选项:
  1. module.exports = {
  2.   css: {
  3.     // 是否将组件中的CSS提取到独立的CSS文件中
  4.     extract: process.env.NODE_ENV === 'production',
  5.    
  6.     // 是否为CSS开启source map
  7.     sourceMap: false,
  8.    
  9.     // 向CSS相关loader传递选项
  10.     loaderOptions: {
  11.       sass: {
  12.         additionalData: `@import "@/styles/variables.scss";`
  13.       },
  14.       less: {
  15.         globalVars: {
  16.           primary: '#fff'
  17.         }
  18.       }
  19.     }
  20.   }
  21. }
复制代码

8.3 构建目标配置

Vue CLI支持构建不同目标的应用,如库或Web组件:
  1. module.exports = {
  2.   // 构建为库
  3.   configureWebpack: {
  4.     output: {
  5.       library: 'my-lib',
  6.       libraryTarget: 'umd'
  7.     }
  8.   }
  9. }
复制代码

然后在package.json中添加:
  1. {
  2.   "main": "dist/my-lib.umd.js",
  3.   "unpkg": "dist/my-lib.umd.min.js",
  4.   "files": [
  5.     "dist/*",
  6.     "src/*"
  7.   ]
  8. }
复制代码

9. 高级应用技巧

掌握一些高级技巧可以让我们更高效地使用Vue CLI。

9.1 多环境配置

除了默认的开发、测试和生产环境,我们可能需要更多的环境,如预发布环境。可以通过创建.env.staging文件来添加预发布环境:
  1. NODE_ENV=production
  2. VUE_APP_TITLE=My App (Staging)
  3. VUE_APP_API_BASE_URL=https://api.staging.com
复制代码

然后在package.json中添加相应的脚本:
  1. {
  2.   "scripts": {
  3.     "serve": "vue-cli-service serve",
  4.     "build": "vue-cli-service build",
  5.     "build:staging": "vue-cli-service build --mode staging"
  6.   }
  7. }
复制代码

9.2 多页面应用配置

Vue CLI默认创建单页面应用,但也可以配置为多页面应用:
  1. module.exports = {
  2.   pages: {
  3.     index: {
  4.       entry: 'src/pages/index/main.js',
  5.       template: 'public/index.html',
  6.       filename: 'index.html',
  7.       title: 'Index Page',
  8.       chunks: ['chunk-vendors', 'chunk-common', 'index']
  9.     },
  10.     about: {
  11.       entry: 'src/pages/about/main.js',
  12.       template: 'public/about.html',
  13.       filename: 'about.html',
  14.       title: 'About Page',
  15.       chunks: ['chunk-vendors', 'chunk-common', 'about']
  16.     }
  17.   }
  18. }
复制代码

9.3 自定义主题配置

对于使用UI组件库的项目,可能需要自定义主题。以Element UI为例:
  1. // vue.config.js
  2. module.exports = {
  3.   css: {
  4.     loaderOptions: {
  5.       sass: {
  6.         additionalData: `
  7.           @import "~element-ui/packages/theme-chalk/src/common/var.scss";
  8.           $--color-primary: #409EFF;
  9.         `
  10.       }
  11.     }
  12.   }
  13. }
复制代码

9.4 微前端配置

Vue CLI可以用于构建微前端应用。例如,使用single-spa:
  1. // vue.config.js
  2. module.exports = {
  3.   configureWebpack: {
  4.     output: {
  5.       library: 'vue-app',
  6.       libraryTarget: 'umd'
  7.     }
  8.   },
  9.   chainWebpack: config => {
  10.     config.devServer
  11.       .headers({
  12.         'Access-Control-Allow-Origin': '*'
  13.       })
  14.   }
  15. }
复制代码

然后创建入口文件:
  1. // main.js
  2. import singleSpaVue from 'single-spa-vue';
  3. import App from './App.vue';
  4. const vueLifecycles = singleSpaVue({
  5.   Vue,
  6.   appOptions: {
  7.     render: h => h(App)
  8.   }
  9. });
  10. export const bootstrap = vueLifecycles.bootstrap;
  11. export const mount = vueLifecycles.mount;
  12. export const unmount = vueLifecycles.unmount;
复制代码

9.5 自定义Webpack插件

通过自定义Webpack插件,我们可以实现更复杂的功能:
  1. // vue.config.js
  2. class MyCustomPlugin {
  3.   apply(compiler) {
  4.     compiler.hooks.emit.tapAsync('MyCustomPlugin', (compilation, callback) => {
  5.       // 自定义逻辑
  6.       console.log('This is my custom plugin!');
  7.       callback();
  8.     });
  9.   }
  10. }
  11. module.exports = {
  12.   configureWebpack: {
  13.     plugins: [
  14.       new MyCustomPlugin()
  15.     ]
  16.   }
  17. }
复制代码

10. 性能优化

性能优化是Vue应用开发的重要环节,Vue CLI提供了多种优化手段。

10.1 代码分割优化

除了前面提到的路由懒加载,还可以优化第三方库的代码分割:
  1. // vue.config.js
  2. module.exports = {
  3.   configureWebpack: {
  4.     optimization: {
  5.       splitChunks: {
  6.         chunks: 'all',
  7.         maxInitialRequests: Infinity,
  8.         minSize: 20000,
  9.         cacheGroups: {
  10.           vendor: {
  11.             test: /[\\/]node_modules[\\/]/,
  12.             name(module) {
  13.               const packageName = module.context.match(/[\\/]node_modules[\\/](.*?)([\\/]|$)/)[1];
  14.               return `npm.${packageName.replace('@', '')}`;
  15.             }
  16.           }
  17.         }
  18.       }
  19.     }
  20.   }
  21. }
复制代码

10.2 图片优化

使用image-webpack-loader优化图片:
  1. // vue.config.js
  2. module.exports = {
  3.   chainWebpack: config => {
  4.     config.module
  5.       .rule('images')
  6.       .use('image-webpack-loader')
  7.       .loader('image-webpack-loader')
  8.       .options({
  9.         mozjpeg: { progressive: true, quality: 65 },
  10.         optipng: { enabled: false },
  11.         pngquant: { quality: [0.65, 0.9], speed: 4 },
  12.         gifsicle: { interlaced: false }
  13.       })
  14.       .end()
  15.   }
  16. }
复制代码

10.3 Gzip压缩

启用Gzip压缩可以显著减少传输数据量:
  1. // vue.config.js
  2. const CompressionPlugin = require('compression-webpack-plugin');
  3. module.exports = {
  4.   configureWebpack: {
  5.     plugins: [
  6.       new CompressionPlugin({
  7.         algorithm: 'gzip',
  8.         test: /\.(js|css|html|svg)$/,
  9.         threshold: 10240,
  10.         minRatio: 0.8
  11.       })
  12.     ]
  13.   }
  14. }
复制代码

10.4 预加载和预取

Vue CLI默认会添加预加载和预取提示,但可以根据需要自定义:
  1. // vue.config.js
  2. module.exports = {
  3.   chainWebpack: config => {
  4.     config.plugin('preload')
  5.       .tap(options => {
  6.         options[0].include = 'all'
  7.         return options
  8.       })
  9.    
  10.     config.plugin('prefetch')
  11.       .tap(options => {
  12.         options[0].fileBlacklist = [/\.map$/, /_preload\.js$/]
  13.         return options
  14.       })
  15.   }
  16. }
复制代码

10.5 DLL优化

对于大型项目,可以使用DLL优化构建速度:
  1. // vue.config.js
  2. const path = require('path');
  3. module.exports = {
  4.   configureWebpack: {
  5.     plugins: [
  6.       new webpack.DllReferencePlugin({
  7.         context: process.cwd(),
  8.         manifest: require('./public/vendor/vendor-manifest.json')
  9.       })
  10.     ]
  11.   },
  12.   chainWebpack: config => {
  13.     config.plugin('html')
  14.       .tap(args => {
  15.         args[0].files.dll = {
  16.           js: '/vendor/vendor.dll.js'
  17.         }
  18.         return args
  19.       })
  20.   }
  21. }
复制代码

11. 常见问题与解决方案

在使用Vue CLI过程中,可能会遇到一些常见问题,本节将提供解决方案。

11.1 构建速度慢

问题:项目构建速度慢,影响开发效率。

解决方案:

1. 使用DLL优化:
  1. // vue.config.js
  2. const webpack = require('webpack');
  3. const path = require('path');
  4. module.exports = {
  5.   configureWebpack: {
  6.     plugins: [
  7.       new webpack.DllReferencePlugin({
  8.         context: process.cwd(),
  9.         manifest: require('./public/vendor/vendor-manifest.json')
  10.       })
  11.     ]
  12.   }
  13. }
复制代码

1. 减少不必要的loader和plugin:
  1. // vue.config.js
  2. module.exports = {
  3.   chainWebpack: config => {
  4.     // 移除 prefetch 插件
  5.     config.plugins.delete('prefetch')
  6.    
  7.     // 移除 preload 插件
  8.     config.plugins.delete('preload')
  9.   }
  10. }
复制代码

1. 使用thread-loader进行多线程构建:
  1. // vue.config.js
  2. module.exports = {
  3.   parallel: require('os').cpus().length > 1
  4. }
复制代码

11.2 静态资源路径问题

问题:生产环境中静态资源路径不正确,导致资源加载失败。

解决方案:

在vue.config.js中正确配置publicPath:
  1. module.exports = {
  2.   publicPath: process.env.NODE_ENV === 'production' ? '/production-sub-path/' : '/'
  3. }
复制代码

11.3 跨域问题

问题:开发环境中请求API时遇到跨域问题。

解决方案:

使用开发服务器代理:
  1. // vue.config.js
  2. module.exports = {
  3.   devServer: {
  4.     proxy: {
  5.       '/api': {
  6.         target: 'http://backend-api.com',
  7.         changeOrigin: true,
  8.         pathRewrite: {
  9.           '^/api': ''
  10.         }
  11.       }
  12.     }
  13.   }
  14. }
复制代码

11.4 大文件警告

问题:构建时收到大文件警告,影响性能。

解决方案:

1. 增加性能阈值:
  1. // vue.config.js
  2. module.exports = {
  3.   configureWebpack: {
  4.     performance: {
  5.       hints: 'warning',
  6.       maxEntrypointSize: 512000,
  7.       maxAssetSize: 512000
  8.     }
  9.   }
  10. }
复制代码

1. 优化代码分割:
  1. // vue.config.js
  2. module.exports = {
  3.   configureWebpack: {
  4.     optimization: {
  5.       splitChunks: {
  6.         chunks: 'all',
  7.         maxSize: 244000
  8.       }
  9.     }
  10.   }
  11. }
复制代码

11.5 IE兼容性问题

问题:Vue应用在IE浏览器中无法正常运行。

解决方案:

1. 确保引入了正确的polyfill:
  1. // babel.config.js
  2. module.exports = {
  3.   presets: [
  4.     [
  5.       '@vue/cli-plugin-babel/preset',
  6.       {
  7.         useBuiltIns: 'entry',
  8.         polyfills: [
  9.           'es6.promise',
  10.           'es6.symbol'
  11.         ]
  12.       }
  13.     ]
  14.   ]
  15. }
复制代码

1. 在入口文件引入polyfill:
  1. // src/main.js
  2. import 'core-js/stable';
  3. import 'regenerator-runtime/runtime';
  4. import Vue from 'vue';
  5. import App from './App.vue';
  6. // ...其他代码
复制代码

11.6 内存溢出

问题:大型项目构建时出现内存溢出错误。

解决方案:

增加Node.js内存限制:
  1. // package.json
  2. {
  3.   "scripts": {
  4.     "serve": "node --max_old_space_size=4096 node_modules/@vue/cli-service/bin/vue-cli-service.js serve",
  5.     "build": "node --max_old_space_size=4096 node_modules/@vue/cli-service/bin/vue-cli-service.js build"
  6.   }
  7. }
复制代码

11.7 样式污染问题

问题:组件样式相互影响,导致样式污染。

解决方案:

1. 使用CSS Modules:
  1. <template>
  2.   <p :class="$style.example">This should be red</p>
  3. </template>
  4. <style module>
  5. .example {
  6.   color: red;
  7. }
  8. </style>
复制代码

1. 使用scoped样式:
  1. <template>
  2.   <p class="example">This should be red</p>
  3. </template>
  4. <style scoped>
  5. .example {
  6.   color: red;
  7. }
  8. </style>
复制代码

1. 使用CSS-in-JS库,如emotion或styled-components:
  1. import { css } from '@emotion/css';
  2. const className = css`
  3.   color: red;
  4. `;
  5. export default {
  6.   render() {
  7.     return <p class={className}>This should be red</p>;
  8.   }
  9. };
复制代码

总结

Vue CLI是一个功能强大的工具,可以帮助我们快速搭建和配置Vue.js项目。通过本文的介绍,我们了解了Vue CLI的基本使用方法、配置选项、插件系统以及高级应用技巧。掌握这些知识,可以帮助我们更高效地开发Vue应用,并解决开发过程中遇到的各种问题。

从简单的项目创建到复杂的多环境配置、性能优化和问题解决,Vue CLI提供了丰富的功能和灵活的配置选项。希望本文能够帮助你更好地理解和使用Vue CLI,提高Vue应用的开发效率和质量。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

频道订阅

频道订阅

加入社群

加入社群

联系我们|TG频道|RSS

Powered by Pixtech

© 2025 Pixtech Team.