Vue CLI 4.0 关于 webpack 基本配置范例

更新记录:
【2020-6-18】增加图片压缩配置;增加 Jquery 配置:

前言

从Vue CLI 3.0 开始,Webpack的配置文件从webpack.config.js变为了vue.config.js。此外,Vue 对配置文件的写法也进行了一些改动。因此,本文参考其他大神的对webpack的说明以及Vue CLI 4.0 关于webpack的说明文档。起草了一份Vue CLI 4.0 的基本配置,供大家参考:

const path = require('path')
const UglifyPlugin = require('uglifyjs-webpack-plugin')
const CompressionPlugin = require("compression-webpack-plugin")

module.exports = {
  publicPath: './', // 基本路径
  outputDir: 'dist', // 输出文件目录
  filenameHashing: true, // 生成的静态资源在它们的文件名中包含了 hash 以便更好的控制缓存
  lintOnSave: false, // eslint-loader 是否在保存的时候检查
  productionSourceMap: true, // 生产环境是否生成 sourceMap 文件

  chainWebpack: config => {
    // 开启图片压缩
    config.module.rule('images')
    .test(/\.(png|jpe?g|gif|svg)(\?.*)?$/)
    .use('url-loader')
        .loader('url-loader')
        .options({
           limit: 10240    // 图片小于10k转为base64,默认4k
    	})
        .end()
    .test(/\.(png|jpe?g|gif|svg)(\?.*)?$/)
    .use('image-webpack-loader')
        .loader('image-webpack-loader')
        .options({ bypassOnDebug: true })
        .end()
      
     // 配置Jquery
    config.plugin('provide').use(webpack.ProvidePlugin, [{
      $: 'jquery',
      jQuery: 'jquery',
      'window.jQuery': 'jquery',
      Popper: ['popper.js', 'default']
    }]);
      
    // 开启js、css压缩
    if (process.env.NODE_ENV === 'production') {
      config.plugin('compressionPlugin')
      .use(new CompressionPlugin({
        test:/\.js$|\.html$|.\css/, // 匹配文件名
        threshold: 10240, // 对超过10k的数据压缩
        deleteOriginalAssets: false // 不删除源文件
      }))
    }
  },
    
  configureWebpack: (config) => {
    if (process.env.NODE_ENV === 'production') {
      // 为生产环境修改配置...
      config.mode = 'production'

      // 将每个依赖包打包成单独的js文件
      const optimization = {
        runtimeChunk: 'single',
        splitChunks: {
          chunks: 'all',
          maxInitialRequests: Infinity,
          minSize: 20000, // 依赖包超过20000bit将被单独打包
          cacheGroups: {
            vendor: {
              test: /[\\/]node_modules[\\/]/,
              name (module) {
                // get the name. E.g. node_modules/packageName/not/this/part.js
                // or node_modules/packageName
                const packageName = module.context.match(/[\\/]node_modules[\\/](.*?)([\\/]|$)/)[1]
                // npm package names are URL-safe, but some servers don't like @ symbols
                return `npm.${packageName.replace('@', '')}`
              }
            }
          }
        },

        // 移除console
        minimizer: [new UglifyPlugin({
          uglifyOptions: {
            warnings: false,
            compress: {
              drop_console: true, // console
              drop_debugger: false,
              pure_funcs: ['console.log'] // 移除console
            }
          }
        })]
      }
      Object.assign(config, {
        optimization
      })
    } else {
      // 为开发环境修改配置...
      config.mode = 'development'
    }
    Object.assign(config, {
      // 开发生产共同配置
      resolve: {
        alias: {
          '@': path.resolve(__dirname, './src'),
          '@c': path.resolve(__dirname, './src/components'),
          '@p': path.resolve(__dirname, './src/pages'),
          '@v': path.resolve(__dirname, './src/views'),
        } // 别名配置
      }
    })
  },

  // css相关配置
  css: {
    extract: true, // 是否使用css分离插件 ExtractTextPlugin
    sourceMap: true, // 开启 CSS source maps?
    requireModuleExtension: true, // 是否仅对文件名包含module的css相关文件使用 CSS Modules
    loaderOptions: {
      css: {
        modules: {
          localIdentName: '[local]_[hash:base64:8]' // 设定 CSS Modules 命名规则
        }
      }
    } // css预设器配置项 详见https://cli.vuejs.org/zh/config/#css-loaderoptions
  },
  parallel: require('os').cpus().length > 1, // 是否为 Babel 或 TypeScript 使用 thread-loader。该选项在系统的 CPU 有多于一个内核时自动启用,仅作用于生产构建。
  // webpack-dev-server 相关配置
  devServer: {
    open: true,
    inline: true, // 开启实时刷新
    host: '0.0.0.0', // 允许外部ip访问
    port: 8024, // 端口
    https: false, // 启用https
    overlay: {
      warnings: true,
      errors: true
    }, // 错误、警告在页面弹出
    proxy: {
      '/api': {
        target: '',
        changeOrigin: true, // 允许websockets跨域
        ws: true,
        pathRewrite: {
          '^/api': ''
        }
      }
    } // 代理转发配置,用于调试环境
  },
  // 第三方插件配置
  pluginOptions: {}
}

需要注意一点,上面的配置中引用了uglifyjs-webpack-pluginimage-webpack-loadercompression-webpack-plugin插件。所以,使用时记得安装插件:

npm i uglifyjs-webpack-plugin --save-dev
npm i compression-webpack-plugin --save-dev
npm i image-webpack-loader --save-dev
npm i jquery --save-dev

注意:

使用 Jquery 使还需要再 main.js 引入 Jquery:

import $ from 'jquery'

此外,如果某个插件无法正常安装,可以尝试降低安装的版本。上面的命令默认安装最新版本。

若想进一步了解Vue CLI 4.0 webpack的各种属性,请移步下面这篇文章查看
Vue CLI 4.0 webpack属性讲解以及创建vue.config.js

参考文档:
  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
### 回答1: Vue CLI 提供了一种叫做 vue.config.js 的配置文件,用来配置 webpack。 在项目根目录下新建一个 vue.config.js 文件,在其中进行 webpack配置。 示例: module.exports = { configureWebpack: { // 添加 webpack 配置 } } 可以在 configureWebpack 中使用 webpack-chain 来配置。 示例: module.exports = { configureWebpack: config => { config.module .rule('vue') .use('vue-loader') .loader('vue-loader') .tap(options => { // 修改配置 return options }) } } 更多关于 vue.config.js 的用法和 webpack配置请参考 Vue CLI 官方文档。 ### 回答2: Vue CLI 是一个构建 Vue.js 项目的脚手架工具,它集成了 webpack,可以简化项目配置过程。配置 webpack 可以让我们根据项目需求,进行一系列额外的定制操作。 首先,我们需要通过 npm 或者 yarn 全局安装 Vue CLI。在命令行中输入以下命令: ``` npm install -g @vue/cli ``` 或者 ``` yarn global add @vue/cli ``` 安装完毕后,我们可以使用 `vue create` 命令创建一个新的 Vue 项目。 ``` vue create my-project ``` 在创建项目的过程中,可以选择手动配置功能。选择手动配置后,我们可以自定义项目的特性和插件。 最重要的一部分就是 webpack配置了。Vue CLI 会生成一个 `vue.config.js` 文件,我们可以在该文件中进行 webpack配置。 以下是一个简单的例子: ```javascript module.exports = { configureWebpack: { resolve: { alias: { 'vue$': 'vue/dist/vue.esm.js' } } } } ``` 上述配置中,我们使用 `configureWebpack` 字段来配置 webpack。在这个例子中,我们将 `vue` 的默认引入方式设置为了完整的构建版(vue.esm.js )。 除此之外,还可以通过 `chainWebpack` 配置来进一步定制 webpack。`chainWebpack` 接收一个函数,该函数接收一个 `config` 参数,我们可以在该函数中对 `config` 进行操作。 以下是一个使用 `chainWebpack` 配置修改 webpack 输出路径的例子: ```javascript module.exports = { chainWebpack: config => { config.output .filename('assets/js/[name].[hash:8].js') .chunkFilename('assets/js/[name].[hash:8].js') } } ``` 上述配置中,我们将 webpack 输出的文件路径设置为了 `assets/js/[name].[hash:8].js`。 除了这些示例之外,我们还可以根据具体的需求进行更复杂的 webpack 配置,比如添加插件、设置 loaders 等等。 总的来说,通过 Vue CLI 的 `vue.config.js` 文件,我们可以方便地对 webpack 进行配置,定制化我们的项目。 ### 回答3: Vue CLI 是一个用于快速搭建 Vue.js 项目的脚手架工具,它包含了一个已经预先配置好的 webpack 构建系统。但是,如果你需要对 webpack 进行自定义配置Vue CLI 也提供了相应的方式来实现。 首先,你可以通过在项目根目录下创建一个 `vue.config.js` 文件来进行配置。在这个文件中,你可以使用 Node.js 导出一个对象,该对象包含了你的自定义配置。比如,你可以修改 webpack 的一些配置选项,添加自定义的 loader 或者 plugin。 以下是一个 `vue.config.js` 的示例: ```javascript module.exports = { // 修改 webpack 配置 configureWebpack: { // 添加自定义的 loader module: { rules: [ { test: /\.txt$/, use: 'raw-loader' } ] }, // 添加自定义的 plugin plugins: [ new MyPlugin() ] }, // 配置 devServer 选项 devServer: { // 代理:将请求代理到指定的后端服务 proxy: { '/api': { target: 'http://localhost:8080', changeOrigin: true } } } } ``` 在上述示例中,`configureWebpack` 字段用于修改 webpack 配置,`devServer` 字段用于配置开发服务器。你可以根据自己的需求进行相应的配置。 另外,Vue CLI 还提供了一些与 webpack 相关的命令行选项,例如 `--mode` 用于指定构建模式,`--modern` 用于启用现代模式构建等。你可以通过在命令行中使用这些选项来实现更详细的配置。 总而言之,通过 `vue.config.js` 文件和命令行选项,你可以对 Vue CLI 使用的 webpack 进行自定义配置,以满足你项目的需求。祝你使用愉快!
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值