webpack打包配置

记录一下自己学习的webpack配置

const path = require('path');
// extract-text-webpack-plugin 已经过时了
// const ExtractTextPlugin = require('extract-text-webpack-plugin');
const MiniCssExtractPlugin = require("mini-css-extract-plugin");
module.exports = {
    // 模块的入口
    // entry: {name: './main.js', nameCopy: './main copy.js'},
    entry: () => {
        // return ['./ex6modules.js'];
        // return ['./main.js', './main copy.js'];
        return ['./main.js'];
    },
    // 
    // content: path.resolve(__dirname, './public'),
    // 最终代码的输出
    output: {
        // [name] 对应 chunk的名称
        filename: 'js/[id].[name].[hash:8].[chunkhash:8].bundle.js',
        // chunkFilename 是一个被main.js异步加载的间接的JS文件。那么如果我们打包一个间接的JS文件的话,就会走chunkFilename这个配置项
        chunkFilename: 'chunkJs/[name].min.js',
        // path: path.resolve(__dirname, './dist_[hash]'),
        path: path.resolve(__dirname, './dist'),
        // 资源路径引用
        publicPath: './',
        // 用于配置crossOriginLoading配置异步插入标签的crossorigin值
        crossOriginLoading: 'use-credentials',
        // libraryTarget 导出库的方式: this commonjs commonjs2 var window global var是默认
        libraryTarget: 'commonjs',
        library: 'libraryName66',
        libraryExport: 'a',
    },
    mode: 'development',
    module: {
        noParse: /jquery|chartjs/, // 不去解析jquery中的依赖关系,
        rules: [{
            // test 可以是数组
            // test: /\.js$/,
            test: [/\.js$/, /\.jsx$/, /\.tsx$/],
            // use: ['babel-loader?cacheDirectory'],
            use: [{
                loader: 'babel-loader',
                options: {
                    // 从缓存目录里面取出
                    cacheDirectory: true,
                },
                // enforce: 'post',
            }],
            enforce: 'post',
            parser: {
                harmoy: true,
            }
        }, {
            test: /\.css$/,
            use: [MiniCssExtractPlugin.loader, 'css-loader'],
            // loaders: ExtractTextPlugin.extract({
            //     use: ['css-loader'],
            // })
        }]
    },
    // 解析文件配置
    resolve: {
        // 别名
        alias: {
            proj: '../深入浅出webpack'
        },
        // 这个一般用的少,对于第三方依赖多份代码,做了指定
        mainFields: ['jsnext:main', 'browser', 'main',],
        // 补足后缀
        extensions: ['.css', '.js', '.json',],
        // 项目中存在大量导入代码的,可以指定路径。
        modules: ['./src/compontents', 'node_modules'],
        // 第三方模块描述文件
        descriptionFiles: ['package.json'],
        // 导入文件强制开启后缀
        // enforceExtension: true,
        // 下面的属性webpack5已经弃用
        // enforceModuleExtension: false,
    },
    // 插件拓展
    plugins: [new MiniCssExtractPlugin({
        filename: `[name]_[contenthash:8].css`,
    })],
    devServer: {
        // 开启热替换
        hot: true,
        // webpack5已经放弃
        // inline: true,
        // historyApiFallback 相当于路由配置
        // historyApiFallback: false,
        historyApiFallback: {
            rewrites: [{
                from: /error/,
                to: '/error.html'
            },
            ]
        },
        // http服务根目录
        static: path.join(__dirname, 'public'),
        // 添加响应头的信息
        headers: {
            'x-foo': 'bar',
        },
        // 指定ip地址,让局域网设备或者同事访问自己的电脑
        // host: '0.0.0.0',
        port: 8080,
        // 访问白名单域名,安全处理
        allowedHosts: ['192.168.20.246'],
        // 关闭host访问, webpack5已经弃用
        // disableHostCheck: true,
        // 开启https服务
        https: true,
        // 客户端日志
        client: {
            logging: 'info',
            progress: true,
        },
        // 启动gzip压缩
        compress: true,
        // 第一次自动打开页面
        open: false,
        // 高级监听文件变化
        watchFiles: {
            paths: ['src/**/*.php', 'public/**/*'],
            options: {
                usePolling: false,
            },
        },
    },
    // 代码调试
    // source-map:在一个单独文件中产生一个完整且功能完全的文件。这个文件具有最好的source map,但是它会减慢打包速度;
    // cheap-module-source-map:在一个单独的文件中产生一个不带列映射的map,不带列映射提高了打包速度,但是也使得浏览器开发者工具只能对应到具体的行,不能对应到具体的列(符号),会对调试造成不便。
    //  eval-source-map:使用eval打包源文件模块,在同一个文件中生产干净的完整版的sourcemap,但是对打包后输出的JS文件的执行具有性能和安全的隐患。在开发阶段这是一个非常好的选项,在生产阶段则一定要不开启这个选项。
    // cheap-module-eval-source-map:这是在打包文件时最快的生产source map的方法,生产的 Source map 会和打包后的JavaScript文件同行显示,没有影射列,和eval-source-map选项具有相似的缺点。
    devtool: 'source-map',
    // 构建不同环境的代码
    target: 'web',
    // 根目录
    context: __dirname,
    // 运行环境已经内置该变量,无需打包
    externals: {
        'jquery': 'jQuery'
    },
    // 配置如何加载本地的loader
    resolveLoader: {
        modules: ['node_modules'],
        extensions: ['.js', '.json'],
        mainFields: ['loader', 'main'],
    },
    // plugins: [
    //     new ExtractTextPlugin({
    //         filename: `[name]_[contenthash:8].css`,
    //     })
    // ]
}
posted @ 2022-07-04 23:16  是豆腐啊  阅读(437)  评论(0编辑  收藏  举报