zoukankan      html  css  js  c++  java
  • Vue-cli 中 Webpack 配置优化(二)

    就直接开始正题。

    一、静态资源拷贝

    对于项目中的一些文件,不需要打包,那么这些文件就直接复制到打包目录就好。

    使用的插件是:copy-webpack-plugin

    安装:

    npm install copy-webpack-plugin -D

    使用:

    Vue-cli 2.x 的配置使用

    //webpack.config.js
    const CopyWebpackPlugin = require('copy-webpack-plugin');
    module.exports = {
        plugins: [
            new CopyWebpackPlugin([
                {
                    from: path.resolve(__dirname,'../static'),
                    to: path.resolve(__dirname, 'dist'),
                    flatten: true,
                }
            ], {
                ignore: ['other.js']
            })
        ]
    }

    Vue-cli 3.x 下默认是会把这个插件集成进去,所以不需要做配置就可以用。

    对于配置信息:

    1、可以配置多个(参数是数组)

    2、from:要复制的目录

    3、to:复制的目的地

    4、flatten:设置为 true 的时候,会删除路径,只复制文件过去

    5、ignor:配置要忽略的文件(配置后,这些文件就不会复制)

    二、CSS 文件处理

    CSS 文件的处理主要分几个部分:

    1、CSS 文件编译(包含预处理器编译)

    2、兼容性处理

    3、CSS 文件抽离和压缩

    下面分别对这些进行说明(下面都是 Vue-cli 2.x 下的配置)

    1、CSS文件编译

    下面是 CSS 最基本的配置

    module.exports = {
      module: {
        rules: [
          // loader 详细配置
          // 每一种文件必须写一个单独的 loader 配置
          {
            // test 匹配哪些文件(以结尾后缀匹配),使用的正则表达式
            test: /.css$/,
            // 要使用的 loader 模块
            use: [
              // use 数组中 loader 的执行顺序是从右到左,从下到上的
              // 创建 style 标签,把 js 文件中的样式资源添加进去,再添加到 head 中生效(下面 css-loader 完成的结果)
              'style-loader',
              // 用于,将 css 编译成 commonJS 模块并加载到 js 文件中,里面内容是样式字符串
              'css-loader',
            ],
          },
          {
            test: /.less$/,
            use: [
              'style-loader',
              'css-loader',
              // 用于将 less 文件编译为 css,需要下载 less-loader 和 less
              'less-loader',
            ],
          },
        ],
      }
    }

    2、CSS 兼容性处理

    在工程化时代,不需要再自己动手写一些兼容性的问题,下面的配置就是通过第三方的配置处理

    module.exports = {
      module: {
        rules: [
          {
            test: /.css$/,
            use: [
              MiniCssExtractPlugin.loader,
              'css-loader',
    
              /**
               * css 兼容性处理:postcss --> postcss-loader postcss-preset-env
               *
               * postcss-preset-env:帮助 postcss 找到 package.json 中的 browserslist 的配置,通过配置加载指定的 css 兼容性样式
               * 
               * browserslist 可以在 github 上面查找具体的更全配置
               * 下面的两个默认的是使用 production 环境的
               * 去指定这个环境的配置是 node 的环境变量:process.env.NODE_ENV = 'development'
           * browserslist 可以在 package.json 中配置,也可以单独一个 .browserslistrc 文件中配置 * "browserslist": { "development": [ "last 1 chrome version", "last 1 firefox version", "last 1 safari version" ], "production": [ ">0.2%", "not dead", "not op_mini all" ] }
    */ // 使用 loader 默认配置 // 'postcss-loader', // 修改 loader 配置 { loader: 'postcss-loader', options: { ident: 'postcss', plugins: () => [ // postcss 的 plugins require('postcss-preset-env')(), ], }, }, ], }, ], } }

    3、CSS 文件的抽离和压缩

    在使用了上面的兼容性处理,或者随着项目越来越大,CSS 文件体量也会越来越大,就需要单独拿出来,并做压缩处理。

    这里主要用到的是两个插件:mini-css-extract-plugin、optimize-css-assets-webpack-plugin

    配置如下:

    const MiniCssExtractPlugin = require('mini-css-extract-plugin')
    
    module.exports = {
      module: {
        rules: [
          {
            test: /.css$/,
            use: [
              // MiniCssExtractPlugin.loader 用于代替上面的 style-loader,把 css 文件单独提取出来
              MiniCssExtractPlugin.loader,
              // 缓存 css 文件
              {
                loader: 'cache-loader',
                options: {
                  cacheDirectory: '../../node_modules/.cache/css'
                }
              },
              // 将 css 整合到 js 文件中
              'css-loader'
            ]
          }
        ]
      },
      plugins: [
        // 提取 css 文件 plugin
        new MiniCssExtractPlugin({
          // 重命名输出文件名
          filename: 'css/built.css'
        })
      ]
    }

    这里注意的点是:style-loader 被 MiniCssExtractPlugin.loader 替换

    4、Vue-cli 3.x 的使用

    上面的配置都是基于 Vue-cli 2.x 的,在 Vue-cli 3.x 中这些配置比较简单:

    vue.config.js
    module.exports = {
      css: {
        // 是否开启 css 预处理文件(不开启的话,预处理器的样式不能生效)
        requireModuleExtension: true,
        // 使用 css 分离
        extract: true,
        // 是否开启 css source-map
        sourceMap: false,
        // 向 CSS 相关的 loader 传递选项
        loaderOptions: {}
      }
    }

    在Vue-cli 3.x 官方文档中也有说:Vue CLI 项目天生支持 PostCSSCSS Modules 和包含 SassLessStylus 在内的预处理器。

  • 相关阅读:
    JAVASCRIPT高程笔记-------JSON与AJAX
    JAVASCRIPT高程笔记-------第十章 DOM对象
    JAVASCRIPT高程笔记-------第八章 浏览器BOM对象
    JAVASCRIPT高程笔记-------第 七章 函数表达式
    JAVASCRIPT高程笔记-------第六章 面向对象的程序设计
    JAVASCRIPT高程笔记-------第五章 引用类型
    javascript高程笔记-------第四章 变量、作用域和内存问题
    redis 从0 到 1 键值相关命令 服务器相关命令
    SnpHub搭建(三) | 手动处理数据后的配置文件填写
    SnpHub搭建 | 数据处理中可能出现的问题
  • 原文地址:https://www.cnblogs.com/zhurong/p/12611360.html
Copyright © 2011-2022 走看看