生产环境-production
开发环境里面的css打包文件和js在一个文件里面,会导致js文件太大,需要下一个插件,plugin mini-css-extract-plugin抽取css文件出来,loader能做的事情比较少,兼容性处理一般用loader,压缩用plugin,
optimize-css-assets-webpack-plugin是一个用来压缩css的插件 抽取css文件: use: [ // 创建style标签,将样式放入 // 'style-loader', // 这个loader取代style-loader。作用:提取js中的css成单独文件 MiniCssExtractPlugin.loader, // 将css文件整合到js文件中 'css-loader' ] new MiniCssExtractPlugin({ // 对输出的css文件进行重命名 filename: 'css/built.css' }) css兼容性处理:(less也能使用 // 'postcss-loader',顺序less->postcss-loader的配置->css-loader-> MiniCssExtractPlugin.loader(从js中抽取css)) css兼容性处理:postcss --> postcss-loader(保证能在webpack中使用) postcss-preset-env,(保证postcss识别到某一个环境,加载指定的配置,精确到某一个浏览器的版本, 帮postcss找到package.json中browserslist里面的配置,通过配置加载指定的css兼容性样式 ) // 开发环境 --> 设置node环境变量:process.env.NODE_ENV = development,不设置默认使用生产环境的配置, "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配置) { loader: 'postcss-loader', options: {//用来修改默认配置 ident: 'postcss', plugins: () => [ // postcss的插件 require('postcss-preset-env')() ] } } js语法检查: 团队工作的时候写的代码风格一致 /* 语法检查: eslint-loader eslint//要用到的依赖 注意:只检查自己写的源代码,第三方的库是不用检查的 设置检查规则: package.json中eslintConfig中设置~ "eslintConfig": { "extends": "airbnb-base" } airbnb --> eslint-config-airbnb-base eslint-plugin-import eslint为了能使用airbnb规则安装的依赖 */ { test: /\.js$/,//检查的文件只有js文件 exclude: /node_modules/,//排除node_modules loader: 'eslint-loader', options: { // 自动修复eslint的错误 fix: true } } js兼容性处理: IE浏览器不认识es6新增语法 /* 将es6以上的语法转换成es5 js兼容性处理:babel-loader @babel/core //要下载的包 1. 基本js兼容性处理 --> @babel/preset-env 问题:只能转换基本语法,如promise高级语法不能转换 2. 全部js兼容性处理 --> @babel/polyfill //下载以后直接引入就可以使用,在js文件中import引入// import '@babel/polyfill'; 问题:我只要解决部分兼容性问题,但是将所有兼容性代码全部引入,体积太大了~ 3. 需要做兼容性处理的就做:按需加载 --> core-js//下载配置 */ { test: /\.js$/, exclude: /node_modules/, loader: 'babel-loader', options: { // 预设:指示babel做怎么样的兼容性处理 presets: [ [ '@babel/preset-env', { // 按需加载 useBuiltIns: 'usage', // 指定core-js版本 corejs: { version: 3 }, // 指定兼容性做到哪个版本浏览器 targets: { chrome: '60', firefox: '60', ie: '9', safari: '10', edge: '17' } } ] ] } } js和html压缩:js压缩,只需要将mode的值改成production,就能实现自动压缩,生产环境下会自动压缩代码,因为他会自动加载一个插件UglifyJsPlugin html压缩:(js和css都做了兼容性处理,html不需要) new HtmlWebpackPlugin({ template: './src/index.html', // 压缩html代码 minify: { // 移除空格 collapseWhitespace: true, // 移除注释 removeComments: true } }) //可以进行代码复用use里面是一个数组,less,sass,css可以用同一个兼容性配置 /* 正常来讲,一个文件只能被一个loader处理。 当一个文件要被多个loader处理,那么一定要指定loader执行的先后顺序: 先执行eslint 在执行babel,不然babel将es6语法转换成es5,eslint会报错 */ // 定义nodejs环境变量:决定使用browserslist的哪个环境//package.json里面有两种配置生产环境和开发环境