|
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
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版本:
安装Vue CLI使用npm(Node包管理器):
或者使用yarn:
安装完成后,可以通过以下命令检查Vue CLI版本:
如果看到版本号,说明Vue CLI安装成功。
2. 创建第一个Vue项目
使用Vue CLI创建新项目非常简单,只需运行以下命令:
- vue create my-first-vue-project
复制代码
这里的my-first-vue-project是项目名称,可以根据需要更改。
执行命令后,Vue CLI会提示你选择预设配置:
- Vue CLI v4.5.13
- ? Please pick a preset: (Use arrow keys)
- ❯ default (babel, eslint)
- Manually select features
复制代码
• default:默认预设,包含Babel和ESLint
• Manually select features:手动选择功能,可以自定义项目配置
选择默认预设会直接创建项目,而选择手动选择功能则会进入更详细的配置流程。
2.1 手动选择功能配置
选择”Manually select features”后,会出现以下选项:
- ? Check the features needed for your project: (Press <space> to select, <a> to toggle all, <i> to invert selection)
- ❯◉ Babel
- ◯ TypeScript
- ◯ Progressive Web App (PWA) Support
- ◯ Router
- ◯ Vuex
- ◯ CSS Pre-processors
- ◉ Linter / Formatter
- ◯ Unit Testing
- ◯ 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会开始创建项目,安装所需的依赖。这个过程可能需要几分钟时间,具体取决于网络速度和所选功能。
创建完成后,进入项目目录并启动开发服务器:
- cd my-first-vue-project
- npm run serve
复制代码
或者使用yarn:
- cd my-first-vue-project
- yarn serve
复制代码
启动成功后,终端会显示访问地址,通常是:
- App running at:
- - Local: http://localhost:8080/
- - Network: http://192.168.x.x:8080/
复制代码
在浏览器中打开显示的地址,即可看到Vue项目的默认页面。
3. 项目结构解析
创建的Vue项目包含以下主要文件和目录:
- my-first-vue-project/
- ├── node_modules/ # 项目依赖
- ├── public/ # 静态资源
- │ ├── favicon.ico # 网站图标
- │ └── index.html # HTML模板
- ├── src/ # 源代码
- │ ├── assets/ # 资源文件(图片、样式等)
- │ ├── components/ # Vue组件
- │ ├── views/ # 页面视图(如果选择了Router)
- │ ├── router/ # 路由配置(如果选择了Router)
- │ ├── store/ # Vuex状态管理(如果选择了Vuex)
- │ ├── App.vue # 根组件
- │ └── main.js # 入口文件
- ├── .gitignore # Git忽略文件
- ├── babel.config.js # Babel配置
- ├── package.json # 项目配置和依赖
- ├── package-lock.json # 依赖版本锁定文件
- ├── README.md # 项目说明文档
- └── vue.config.js # Vue CLI配置(可选)
复制代码
3.1 主要文件解析
这是项目的HTML模板文件,Vue CLI会基于此文件生成最终的HTML文件。其中最重要的是:
这是Vue应用的挂载点,Vue实例将挂载到这个DOM元素上。
这是应用的入口文件,负责创建Vue实例并挂载到DOM:
- import Vue from 'vue'
- import App from './App.vue'
- Vue.config.productionTip = false
- new Vue({
- render: h => h(App)
- }).$mount('#app')
复制代码
如果选择了Router和Vuex,入口文件会包含相应的配置:
- import Vue from 'vue'
- import App from './App.vue'
- import router from './router'
- import store from './store'
- Vue.config.productionTip = false
- new Vue({
- router,
- store,
- render: h => h(App)
- }).$mount('#app')
复制代码
这是应用的根组件,所有其他组件都会在这个组件下渲染:
- <template>
- <div id="app">
- <img alt="Vue logo" src="./assets/logo.png">
- <HelloWorld msg="Welcome to Your Vue.js App"/>
- </div>
- </template>
- <script>
- import HelloWorld from './components/HelloWorld.vue'
- export default {
- name: 'App',
- components: {
- HelloWorld
- }
- }
- </script>
- <style>
- #app {
- font-family: Avenir, Helvetica, Arial, sans-serif;
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
- text-align: center;
- color: #2c3e50;
- margin-top: 60px;
- }
- </style>
复制代码
这个文件包含了项目的元数据和依赖信息:
- {
- "name": "my-first-vue-project",
- "version": "0.1.0",
- "private": true,
- "scripts": {
- "serve": "vue-cli-service serve",
- "build": "vue-cli-service build",
- "lint": "vue-cli-service lint"
- },
- "dependencies": {
- "core-js": "^3.6.5",
- "vue": "^2.6.11"
- },
- "devDependencies": {
- "@vue/cli-plugin-babel": "~4.5.0",
- "@vue/cli-plugin-eslint": "~4.5.0",
- "@vue/cli-service": "~4.5.0",
- "babel-eslint": "^10.1.0",
- "eslint": "^6.7.2",
- "eslint-plugin-vue": "^6.2.2",
- "vue-template-compiler": "^2.6.11"
- }
- }
复制代码
其中,scripts部分定义了可用的npm命令:
• serve:启动开发服务器
• build:构建生产版本
• lint:运行代码检查
4. 基础配置详解
Vue CLI提供了丰富的配置选项,让我们可以自定义项目的各个方面。
4.1 vue.config.js配置
Vue CLI项目可以通过在根目录创建vue.config.js文件来自定义配置。这个文件会导出一个包含配置选项的对象:
- module.exports = {
- // 配置选项
- }
复制代码- module.exports = {
- // 部署应用包时的基本URL
- publicPath: process.env.NODE_ENV === 'production' ? '/production-sub-path/' : '/',
-
- // 输出文件目录
- outputDir: 'dist',
-
- // 放置静态资源的目录
- assetsDir: 'static',
-
- // 生产环境的source map
- productionSourceMap: false,
-
- // 开发服务器配置
- devServer: {
- port: 8080,
- open: true,
- proxy: {
- '/api': {
- target: 'http://backend-api.com',
- changeOrigin: true,
- pathRewrite: {
- '^/api': ''
- }
- }
- }
- },
-
- // CSS相关配置
- css: {
- loaderOptions: {
- sass: {
- additionalData: `@import "@/assets/styles/variables.scss";`
- }
- }
- }
- }
复制代码
• 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文件来配置环境变量:
- .env # 在所有环境中被载入
- .env.local # 在所有环境中被载入,但会被git忽略
- .env.[mode] # 只在指定模式中被载入
- .env.[mode].local # 只在指定模式中被载入,但会被git忽略
复制代码
例如,创建一个.env.development文件:
- VUE_APP_API_BASE_URL=http://localhost:3000/api
复制代码
然后在代码中可以通过process.env.VUE_APP_API_BASE_URL访问这个变量:
- const apiUrl = process.env.VUE_APP_API_BASE_URL
复制代码
注意:只有以VUE_APP_开头的变量才会被嵌入到客户端侧的包中。
4.3 Babel配置
Vue CLI使用Babel来转换JavaScript代码,确保在旧版浏览器中也能正常运行。Babel的配置可以在babel.config.js文件中进行:
- module.exports = {
- presets: [
- '@vue/cli-plugin-babel/preset'
- ],
- plugins: [
- // 添加额外的Babel插件
- ]
- }
复制代码
如果需要支持特定的浏览器,可以在package.json中添加browserslist字段:
- "browserslist": [
- "> 1%",
- "last 2 versions",
- "not dead"
- ]
复制代码
4.4 ESLint配置
ESLint是一个代码检查工具,可以帮助我们保持代码风格一致并发现潜在问题。ESLint的配置可以在项目根目录的.eslintrc.js文件中进行:
- module.exports = {
- root: true,
- env: {
- node: true
- },
- extends: [
- 'plugin:vue/essential',
- 'eslint:recommended'
- ],
- parserOptions: {
- parser: 'babel-eslint'
- },
- rules: {
- 'no-console': process.env.NODE_ENV === 'production' ? 'warn' : 'off',
- 'no-debugger': process.env.NODE_ENV === 'production' ? 'warn' : 'off',
- // 自定义规则
- 'vue/no-unused-components': 'warn',
- 'vue/no-unused-vars': 'warn'
- }
- }
复制代码
5. 开发环境配置
开发环境的配置对于提高开发效率至关重要。Vue CLI提供了丰富的开发环境配置选项。
5.1 热重载
Vue CLI内置了热重载功能,当你修改代码并保存时,浏览器会自动刷新并应用更改,无需手动刷新页面。这个功能默认启用,无需额外配置。
5.2 开发服务器配置
开发服务器的配置可以在vue.config.js中的devServer选项中设置:
- module.exports = {
- devServer: {
- // 服务器端口号
- port: 8080,
-
- // 服务器启动后自动打开浏览器
- open: true,
-
- // 启用热重载
- hot: true,
-
- // 在浏览器中显示编译错误
- overlay: {
- warnings: true,
- errors: true
- },
-
- // 代理配置
- proxy: {
- '/api': {
- target: 'http://backend-api.com',
- changeOrigin: true,
- pathRewrite: {
- '^/api': ''
- }
- }
- }
- }
- }
复制代码
5.3 Source Map配置
Source Map可以帮助我们在调试时定位到原始代码,而不是编译后的代码。在开发环境中,Source Map默认启用。如果需要自定义,可以在vue.config.js中配置:
- module.exports = {
- configureWebpack: {
- devtool: 'eval-source-map'
- }
- }
复制代码
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进行自定义:
- module.exports = {
- // 生产环境是否生成source map
- productionSourceMap: false,
-
- // 配置webpack
- configureWebpack: {
- performance: {
- hints: 'warning',
- // 入口起点的最大体积
- maxEntrypointSize: 512000,
- // 生成文件的最大体积
- maxAssetSize: 512000
- }
- },
-
- // 链式webpack配置
- chainWebpack: config => {
- // 移除 prefetch 插件
- config.plugins.delete('prefetch')
-
- // 压缩代码
- if (process.env.NODE_ENV === 'production') {
- config.plugin('compression')
- .use(require('compression-webpack-plugin'), [{
- algorithm: 'gzip',
- test: /\.(js|css|html|svg)$/,
- threshold: 10240,
- minRatio: 0.8
- }])
- }
- }
- }
复制代码
6.2 代码分割
代码分割是优化大型应用加载性能的重要手段。Vue CLI默认会为你的代码进行分割,但你也可以通过动态导入进一步优化:
- // 路由懒加载
- const routes = [
- {
- path: '/about',
- name: 'About',
- component: () => import(/* webpackChunkName: "about" */ '../views/About.vue')
- }
- ]
- // 组件懒加载
- export default {
- components: {
- 'MyComponent': () => import('./MyComponent.vue')
- }
- }
复制代码
6.3 静态资源处理
Vue CLI对静态资源的处理遵循以下规则:
• 放在public目录中的文件会被原样复制到输出目录
• 放在src/assets目录中的文件会被webpack处理
对于较大的静态资源,可以考虑使用CDN:
- module.exports = {
- chainWebpack: config => {
- if (process.env.NODE_ENV === 'production') {
- config.plugin('html')
- .tap(args => {
- args[0].cdn = {
- css: [
- 'https://cdn.example.com/some.css'
- ],
- js: [
- 'https://cdn.example.com/some.js'
- ]
- }
- return args
- })
- }
- }
- }
复制代码
然后在public/index.html中使用:
- <% for (var i in htmlWebpackPlugin.options.cdn && htmlWebpackPlugin.options.cdn.css) { %>
- <link href="<%= htmlWebpackPlugin.options.cdn.css[i] %>" rel="preload" as="style">
- <link href="<%= htmlWebpackPlugin.options.cdn.css[i] %>" rel="stylesheet">
- <% } %>
- <% for (var i in htmlWebpackPlugin.options.cdn && htmlWebpackPlugin.options.cdn.js) { %>
- <link href="<%= htmlWebpackPlugin.options.cdn.js[i] %>" rel="preload" as="script">
- <% } %>
复制代码
6.4 环境变量配置
生产环境通常需要特定的环境变量,可以通过.env.production文件配置:
- VUE_APP_API_BASE_URL=https://api.production.com
- VUE_APP_TITLE=My App
复制代码
然后在代码中通过process.env访问:
- const apiUrl = process.env.VUE_APP_API_BASE_URL
- const title = process.env.VUE_APP_TITLE
复制代码
7. 插件系统使用
Vue CLI的插件系统是其强大功能的核心,通过插件可以轻松扩展项目功能。
7.1 官方插件
Vue CLI提供了许多官方插件,可以通过以下命令安装:
- vue add @vue/cli-plugin-<plugin-name>
复制代码
例如,添加TypeScript支持:
添加PWA支持:
7.2 第三方插件
除了官方插件,还有许多第三方插件可供使用。例如,添加Element UI组件库:
7.3 插件配置
大多数插件都提供配置选项,可以在vue.config.js中进行配置:
- module.exports = {
- pluginOptions: {
- // 插件配置
- }
- }
复制代码
例如,配置Element UI:
- module.exports = {
- pluginOptions: {
- element: {
- size: 'small',
- zIndex: 3000
- }
- }
- }
复制代码
7.4 自定义插件
你也可以创建自己的Vue CLI插件。一个基本的插件结构如下:
- my-plugin/
- ├── generator.js # 生成器(用于创建文件)
- ├── index.js # 服务插件
- ├── prompts.js # 交互提示
- └── package.json # 插件元数据
复制代码
例如,创建一个简单的插件:
- // index.js
- module.exports = (api, options) => {
- // 修改webpack配置
- api.chainWebpack(webpackConfig => {
- webpackConfig.module
- .rule('my-rule')
- .test(/\.my$/)
- .use('my-loader')
- .loader('my-loader')
- })
- }
复制代码
8. 自定义配置
虽然Vue CLI提供了许多默认配置,但有时我们需要更深入地自定义项目配置。
8.1 webpack配置
Vue CLI封装了webpack的复杂性,但仍然允许我们通过configureWebpack或chainWebpack选项来自定义webpack配置。
configureWebpack选项可以是一个对象或一个函数:
- // 对象形式
- module.exports = {
- configureWebpack: {
- plugins: [
- new MyAwesomeWebpackPlugin()
- ]
- }
- }
- // 函数形式
- module.exports = {
- configureWebpack: config => {
- if (process.env.NODE_ENV === 'production') {
- // 生产环境特定配置
- config.plugins.push(new MyProductionWebpackPlugin())
- } else {
- // 开发环境特定配置
- config.plugins.push(new MyDevelopmentWebpackPlugin())
- }
- }
- }
复制代码
chainWebpack选项允许我们基于webpack-chain进行更细粒度的配置:
- module.exports = {
- chainWebpack: config => {
- // 添加别名
- config.resolve.alias.set('@', resolve('src'))
-
- // 修改插件选项
- config.plugin('preload').tap(options => {
- options[0].include = 'all'
- return options
- })
-
- // 删除插件
- config.plugins.delete('prefetch')
- }
- }
复制代码
8.2 CSS配置
Vue CLI支持CSS预处理器,如Sass、Less和Stylus。可以通过vue.config.js配置CSS相关选项:
- module.exports = {
- css: {
- // 是否将组件中的CSS提取到独立的CSS文件中
- extract: process.env.NODE_ENV === 'production',
-
- // 是否为CSS开启source map
- sourceMap: false,
-
- // 向CSS相关loader传递选项
- loaderOptions: {
- sass: {
- additionalData: `@import "@/styles/variables.scss";`
- },
- less: {
- globalVars: {
- primary: '#fff'
- }
- }
- }
- }
- }
复制代码
8.3 构建目标配置
Vue CLI支持构建不同目标的应用,如库或Web组件:
- module.exports = {
- // 构建为库
- configureWebpack: {
- output: {
- library: 'my-lib',
- libraryTarget: 'umd'
- }
- }
- }
复制代码
然后在package.json中添加:
- {
- "main": "dist/my-lib.umd.js",
- "unpkg": "dist/my-lib.umd.min.js",
- "files": [
- "dist/*",
- "src/*"
- ]
- }
复制代码
9. 高级应用技巧
掌握一些高级技巧可以让我们更高效地使用Vue CLI。
9.1 多环境配置
除了默认的开发、测试和生产环境,我们可能需要更多的环境,如预发布环境。可以通过创建.env.staging文件来添加预发布环境:
- NODE_ENV=production
- VUE_APP_TITLE=My App (Staging)
- VUE_APP_API_BASE_URL=https://api.staging.com
复制代码
然后在package.json中添加相应的脚本:
- {
- "scripts": {
- "serve": "vue-cli-service serve",
- "build": "vue-cli-service build",
- "build:staging": "vue-cli-service build --mode staging"
- }
- }
复制代码
9.2 多页面应用配置
Vue CLI默认创建单页面应用,但也可以配置为多页面应用:
- module.exports = {
- pages: {
- index: {
- entry: 'src/pages/index/main.js',
- template: 'public/index.html',
- filename: 'index.html',
- title: 'Index Page',
- chunks: ['chunk-vendors', 'chunk-common', 'index']
- },
- about: {
- entry: 'src/pages/about/main.js',
- template: 'public/about.html',
- filename: 'about.html',
- title: 'About Page',
- chunks: ['chunk-vendors', 'chunk-common', 'about']
- }
- }
- }
复制代码
9.3 自定义主题配置
对于使用UI组件库的项目,可能需要自定义主题。以Element UI为例:
- // vue.config.js
- module.exports = {
- css: {
- loaderOptions: {
- sass: {
- additionalData: `
- @import "~element-ui/packages/theme-chalk/src/common/var.scss";
- $--color-primary: #409EFF;
- `
- }
- }
- }
- }
复制代码
9.4 微前端配置
Vue CLI可以用于构建微前端应用。例如,使用single-spa:
- // vue.config.js
- module.exports = {
- configureWebpack: {
- output: {
- library: 'vue-app',
- libraryTarget: 'umd'
- }
- },
- chainWebpack: config => {
- config.devServer
- .headers({
- 'Access-Control-Allow-Origin': '*'
- })
- }
- }
复制代码
然后创建入口文件:
- // main.js
- import singleSpaVue from 'single-spa-vue';
- import App from './App.vue';
- const vueLifecycles = singleSpaVue({
- Vue,
- appOptions: {
- render: h => h(App)
- }
- });
- export const bootstrap = vueLifecycles.bootstrap;
- export const mount = vueLifecycles.mount;
- export const unmount = vueLifecycles.unmount;
复制代码
9.5 自定义Webpack插件
通过自定义Webpack插件,我们可以实现更复杂的功能:
- // vue.config.js
- class MyCustomPlugin {
- apply(compiler) {
- compiler.hooks.emit.tapAsync('MyCustomPlugin', (compilation, callback) => {
- // 自定义逻辑
- console.log('This is my custom plugin!');
- callback();
- });
- }
- }
- module.exports = {
- configureWebpack: {
- plugins: [
- new MyCustomPlugin()
- ]
- }
- }
复制代码
10. 性能优化
性能优化是Vue应用开发的重要环节,Vue CLI提供了多种优化手段。
10.1 代码分割优化
除了前面提到的路由懒加载,还可以优化第三方库的代码分割:
- // vue.config.js
- module.exports = {
- configureWebpack: {
- optimization: {
- splitChunks: {
- chunks: 'all',
- maxInitialRequests: Infinity,
- minSize: 20000,
- cacheGroups: {
- vendor: {
- test: /[\\/]node_modules[\\/]/,
- name(module) {
- const packageName = module.context.match(/[\\/]node_modules[\\/](.*?)([\\/]|$)/)[1];
- return `npm.${packageName.replace('@', '')}`;
- }
- }
- }
- }
- }
- }
- }
复制代码
10.2 图片优化
使用image-webpack-loader优化图片:
- // vue.config.js
- module.exports = {
- chainWebpack: config => {
- config.module
- .rule('images')
- .use('image-webpack-loader')
- .loader('image-webpack-loader')
- .options({
- mozjpeg: { progressive: true, quality: 65 },
- optipng: { enabled: false },
- pngquant: { quality: [0.65, 0.9], speed: 4 },
- gifsicle: { interlaced: false }
- })
- .end()
- }
- }
复制代码
10.3 Gzip压缩
启用Gzip压缩可以显著减少传输数据量:
- // vue.config.js
- const CompressionPlugin = require('compression-webpack-plugin');
- module.exports = {
- configureWebpack: {
- plugins: [
- new CompressionPlugin({
- algorithm: 'gzip',
- test: /\.(js|css|html|svg)$/,
- threshold: 10240,
- minRatio: 0.8
- })
- ]
- }
- }
复制代码
10.4 预加载和预取
Vue CLI默认会添加预加载和预取提示,但可以根据需要自定义:
- // vue.config.js
- module.exports = {
- chainWebpack: config => {
- config.plugin('preload')
- .tap(options => {
- options[0].include = 'all'
- return options
- })
-
- config.plugin('prefetch')
- .tap(options => {
- options[0].fileBlacklist = [/\.map$/, /_preload\.js$/]
- return options
- })
- }
- }
复制代码
10.5 DLL优化
对于大型项目,可以使用DLL优化构建速度:
- // vue.config.js
- const path = require('path');
- module.exports = {
- configureWebpack: {
- plugins: [
- new webpack.DllReferencePlugin({
- context: process.cwd(),
- manifest: require('./public/vendor/vendor-manifest.json')
- })
- ]
- },
- chainWebpack: config => {
- config.plugin('html')
- .tap(args => {
- args[0].files.dll = {
- js: '/vendor/vendor.dll.js'
- }
- return args
- })
- }
- }
复制代码
11. 常见问题与解决方案
在使用Vue CLI过程中,可能会遇到一些常见问题,本节将提供解决方案。
11.1 构建速度慢
问题:项目构建速度慢,影响开发效率。
解决方案:
1. 使用DLL优化:
- // vue.config.js
- const webpack = require('webpack');
- const path = require('path');
- module.exports = {
- configureWebpack: {
- plugins: [
- new webpack.DllReferencePlugin({
- context: process.cwd(),
- manifest: require('./public/vendor/vendor-manifest.json')
- })
- ]
- }
- }
复制代码
1. 减少不必要的loader和plugin:
- // vue.config.js
- module.exports = {
- chainWebpack: config => {
- // 移除 prefetch 插件
- config.plugins.delete('prefetch')
-
- // 移除 preload 插件
- config.plugins.delete('preload')
- }
- }
复制代码
1. 使用thread-loader进行多线程构建:
- // vue.config.js
- module.exports = {
- parallel: require('os').cpus().length > 1
- }
复制代码
11.2 静态资源路径问题
问题:生产环境中静态资源路径不正确,导致资源加载失败。
解决方案:
在vue.config.js中正确配置publicPath:
- module.exports = {
- publicPath: process.env.NODE_ENV === 'production' ? '/production-sub-path/' : '/'
- }
复制代码
11.3 跨域问题
问题:开发环境中请求API时遇到跨域问题。
解决方案:
使用开发服务器代理:
- // vue.config.js
- module.exports = {
- devServer: {
- proxy: {
- '/api': {
- target: 'http://backend-api.com',
- changeOrigin: true,
- pathRewrite: {
- '^/api': ''
- }
- }
- }
- }
- }
复制代码
11.4 大文件警告
问题:构建时收到大文件警告,影响性能。
解决方案:
1. 增加性能阈值:
- // vue.config.js
- module.exports = {
- configureWebpack: {
- performance: {
- hints: 'warning',
- maxEntrypointSize: 512000,
- maxAssetSize: 512000
- }
- }
- }
复制代码
1. 优化代码分割:
- // vue.config.js
- module.exports = {
- configureWebpack: {
- optimization: {
- splitChunks: {
- chunks: 'all',
- maxSize: 244000
- }
- }
- }
- }
复制代码
11.5 IE兼容性问题
问题:Vue应用在IE浏览器中无法正常运行。
解决方案:
1. 确保引入了正确的polyfill:
- // babel.config.js
- module.exports = {
- presets: [
- [
- '@vue/cli-plugin-babel/preset',
- {
- useBuiltIns: 'entry',
- polyfills: [
- 'es6.promise',
- 'es6.symbol'
- ]
- }
- ]
- ]
- }
复制代码
1. 在入口文件引入polyfill:
- // src/main.js
- import 'core-js/stable';
- import 'regenerator-runtime/runtime';
- import Vue from 'vue';
- import App from './App.vue';
- // ...其他代码
复制代码
11.6 内存溢出
问题:大型项目构建时出现内存溢出错误。
解决方案:
增加Node.js内存限制:
- // package.json
- {
- "scripts": {
- "serve": "node --max_old_space_size=4096 node_modules/@vue/cli-service/bin/vue-cli-service.js serve",
- "build": "node --max_old_space_size=4096 node_modules/@vue/cli-service/bin/vue-cli-service.js build"
- }
- }
复制代码
11.7 样式污染问题
问题:组件样式相互影响,导致样式污染。
解决方案:
1. 使用CSS Modules:
- <template>
- <p :class="$style.example">This should be red</p>
- </template>
- <style module>
- .example {
- color: red;
- }
- </style>
复制代码
1. 使用scoped样式:
- <template>
- <p class="example">This should be red</p>
- </template>
- <style scoped>
- .example {
- color: red;
- }
- </style>
复制代码
1. 使用CSS-in-JS库,如emotion或styled-components:
- import { css } from '@emotion/css';
- const className = css`
- color: red;
- `;
- export default {
- render() {
- return <p class={className}>This should be red</p>;
- }
- };
复制代码
总结
Vue CLI是一个功能强大的工具,可以帮助我们快速搭建和配置Vue.js项目。通过本文的介绍,我们了解了Vue CLI的基本使用方法、配置选项、插件系统以及高级应用技巧。掌握这些知识,可以帮助我们更高效地开发Vue应用,并解决开发过程中遇到的各种问题。
从简单的项目创建到复杂的多环境配置、性能优化和问题解决,Vue CLI提供了丰富的功能和灵活的配置选项。希望本文能够帮助你更好地理解和使用Vue CLI,提高Vue应用的开发效率和质量。
版权声明
1、转载或引用本网站内容(深入浅出Vue CLI项目搭建从基础配置到高级应用技巧)须注明原网址及作者(威震华夏关云长),并标明本网站网址(https://pixtech.cc/)。
2、对于不当转载或引用本网站内容而引起的民事纷争、行政处理或其他损失,本网站不承担责任。
3、对不遵守本声明或其他违法、恶意使用本网站内容者,本网站保留追究其法律责任的权利。
本文地址: https://pixtech.cc/thread-37581-1-1.html
|
|