webpack入门二

189 阅读1分钟

css loader

npm install style-loader css-loader
npm install less less-loader
npm install sass dart-sass sass-loader  

module.export = {
    module: {
        rules: [
            {
                // 重点
                test: /\.css$/,
                use: [
                     // 从下往上执行,先后顺序不能改变 
                    'style-loader', // 将css通过style方式插入html中
                    {
                        loader: 'css-loader', // 转化css中的@import 路径url
                        options: {
                         // 如果是css@import 导入的css需要预加载后面的几个loader,这里需要设置为1。如果是less, sass就不需要设置,因为less,sass支持导入,在这里就没有导入了,所以不需要配置了
                            importLoaders: 1
                        }
                    },
                    'less-loader' || 'sass-loader'
                ]
            }
        ]
    }
}

file-loader url-loader

module.export = {
    module: {
        rules: [
            {
                // 重点
                test: /\.(jpg|png|gif|svg)$/,
                use: [
                    {
                        loader: 'file-loader', // 用了加载图片路径 
                        options: {
                            esModule: false, // 不起用esModule
                            name: '[hash:10].[ext]' //hash 10位使用以前的扩展名
                        }
                    },
                ]
            }
        ]
    }
}

module.export = {
    module: {
        rules: [
            {
                // 重点
                test: /\.(jpg|png|gif|svg)$/,
                use: [
                    {
                        loader: 'url-loader', // 用了加载图片路径 
                        options: {
                            limit: 8*1024, // 当图片小于8kb时导入的图片转化为base64,减少http请求 
                            esModule: false, // 不起用esModule
                            name: '[hash:10].[ext]' //hash 10位使用以前的扩展名
                        }
                    },
                ]
            }
        ]
    }
}

 webpack5
module.export = {
    module: {
        rules: [
            {
                // 重点
                test: /\.(jpg|png|gif|svg)$/,
                type: 'asset',
                parser: {
                    dataUrlCondition: {
                        maxSize: 8 * 1024 // 8kb
                    }
                },
                generator: {
                    filename: '[hash][ext][query]'
                }
            }
        ]
    }
}



读取配置文件 .env

文件内容 config/.env NODE_ENV=production

    npm install dotenv -D
    
    require('dotenv').config({path: path.resolve(__dirname, './config/.env')})
    console.log(process.env.NODE_ENV) // 就为配置的信息

浏览器css兼容

    npm install postcss-loader postcss-preset-env -D
    
    module.export = {
        module: {
            rules: [
                {
                    // 重点
                    test: /\.css$/,
                    use: [
                         
                        'style-loader', 
                        {
                            loader: 'css-loader', 
                            options: {
                                importLoaders: 1
                            }
                        },
                        'postcss-loader', // 给兼容的浏览器加前缀
                        'sass-loader'
                    ]
                }
            ]
        }
    }
    
    根目录配置 postcss.config.js  .browserslistrc 文件
    
    1. postcss.config.js文件
        module.exports = {
            plugins: [
                'postcss-preset-env'
            ]
        }
    
    2. .browserslistrc文件
        # Browsers that we support 

        last 3 version
        > 1%

js兼容

npm install babel-loader @babel/core @babel/preset-env  -D @babel/polyfill core-js
// 添加两个class其他插件
npm install @babel/plugin-proposal-class-properties @babel/plugin-proposal-decorators -D

// 装饰器插件需要配置 根目录 jsconfig.json文件支持
{
    "compilerOptions": {
        "experimentDecorators": true
    }
}

// 配置babel .babelrc

{
    "presets": [
        ["@babel/preset-env", {"useBuiltIns": "usage", "corejs": { "version": 3 } }]
    ],
    "plugins": [
        ["@babel/plugin-proposal-decorators", { "legacy": true }],
        ["@babel/plugin-proposal-class-properties"]
     ]
}

// 配置webpack.config.js

 module.export = {
        module: {
            rules: [
                {
                    // 重点
                    test: /\.js$/,
                    loader: 'babel-loader'
                }
            ]
        }
    }

eslint

添加.eslintignore可以忽略哪些文件不校验



// 添加eslint
npm install eslint eslint-loader babel-eslint -D
// 配置webpack.config.js
 module.export = {
        module: {
            rules: [
                {
                    // 重点
                    test: /\.js$/,
                    loader: 'eslint-loader',
                    enforce: 'pre',
                    options: {
                        fix: true
                     },
                     exclude: /node_modules/
                }
            ]
        }
    }
    
 // vue 添加aribnb规范
 npm install eslint eslint-loader eslint-config-airbnb-base eslint-plugin-import babel-eslint eslint-plugin-vue -D

module.exports = {
  // 关键:启用 airbnb 规则
  extends: ['plugin:vue/essential', 'airbnb-base'],
  env: {
    // 添加browser和es6的环境
    browser: true,
    es6: true,
    node: true,
  },
  // 使用语言及版本
  parserOptions: {
    parser: 'babel-eslint',
    ecmaVersion: 2018,
    sourceType: 'module',
  },
  // 个人自定义规则
  rules: {
    'linebreak-style': 'off',
    'no-param-reassign': ["error", { "props": false }],
    'no-console': 'off',
    indent: ['error', 4],
    quotes: 'error',
  },
};
    
//react 添加airbnb规范    
npm install yarn add eslint-config-airbnb eslint-plugin-import -D
// 添加 react
eslint-plugin-react eslint-plugin-jsx-a11y


    
    // 配置 .eslintrc.js
    
    module.exports = {
        extends: 'airbnb',
        parser: 'babel-eslint',
        env: {
            browser: true,
            node: true
        },
        rules: {
            'linebreak-style': 'off',
            'no-param-reassign': ["error", { "props": false }],
            'no-console': 'off',
            indent: ['error', 4],
            quotes: 'error',
        }
    }
    
    

全局注入插件

1.providePlugin
npm install lodash
 module.exports = {
     plugins: [
        new webpack.ProvidePlugin({
            _: 'lodash',
        }),
    ],
 }
 
2.externals属性配合CDN
   2.1    index.html 在head标签内引入 <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
   2.2    module.exports = {
            externals: {
                lodash: '_'
            }
           }
   2.3 在代码任何地方可以导入  import _ from 'lodash'; 使用

3.expose-loader
npm install expose-loader
 module.exports = {
        module: {
            rules: [
                {
                    test: /lodash/,
                    loader: 'expose-loader',
                    options: {
                        exposes: {
                            globalName: '_',
                            override: true,
                        },
                    },
                },
             ]
         }
 }
 
 index.js 文件
 const _ = require("lodash");
 // 就可以拿到全局拿到了
 console.log(window._)