zoukankan      html  css  js  c++  java
  • 08多进程打包、externals、dll

    多进程打包

    进程启动大概为600ms,进程通信也有开销
    如果开始进程,需配置:thread-loader0

    {
        test: /.js$/,
        exclude: /node_modules/,
        use: [
            /**
             * 开始多进程打包
             * 进程启动大概为600ms,进程通信也有开销。
             * 只有工作消耗时间比较长,才需要多进程打包
             */
            //'thread-loader', // 或者
            {
                loader: 'thread-loader',
                options: {
                    workers: 2 // 进程2个
                }
            },
            {
                loader: 'babel-loader',
                options: {
                presets: [
                    [
                        '@babel/preset-env',
                        {
                            useBuiltIns: 'usage',
                            corejs: {version: 3},
                            targets: {
                                chrome: '70',
                                firefox: '55'
                            }
                        }
                    ]
                ],
                // 开始babel缓存
                // 第二次构建时,会读取之前的缓存
                cacheDirectory: true
                }
            }
        ]
    },
    

    externals

    externals:忽略打包内容

    externals: {
        // 拒绝jQuery被打包进来
        jquery: 'jQuery'
    }
    

    dll

    • Dll技术:对某些库(第三方库:jquery、react、vue...)进行单独打包
    • 只需要一次运行打包:webpack --config webpack.dll.js
    /**
     * 使用dll技术,对某些库(第三方库:jquery、react、vue...)进行单独打包
     *  当你运行webpack时,默认查找webpack.config.js配置文件
     *  需求:需要运行webpack.dll.js文件
     *      --> webpack --config webpack.dll.js
     */
    
    const { resolve } = require('path');
    const webpack = require('webpack');
    
    module.exports = {
        entry: {
            // 最终打包生成的[name] --> jquery
            // ['jquery'] --> 要打包的库是jquery
            jquery: ['jquery']
        },
        output: {
            filename: '[name].js',
            path: resolve(__dirname, 'dll'),
            library: '[name]_[hash]' // 打包的库里面向外暴露出去的内容叫什么名字
        },
        plugins: [
            // 打包生成一个 manifest.json --> 提供和jquery映射
            new webpack.DllPlugin({
                name: '[name]_[hash]', // 映射库暴露的内容名称
                path: resolve(__dirname, 'dll/manifest.json') // 输出文件路径
            })
        ],
        mode: 'production'
    }
    
    • 需要引入插件add-asset-html-webpack-plugin
      npm install add-asset-html-webpack-plugin -D
    • 在webpack.config.json中引入和配置如下:
      需要引入webpack自身插件
     const webpack = require('webpack');
     const AddAssetHtmlWebpackPlugin = require('add-asset-html-webpack-plugin');
    

    在plugins配置如下:

    // 告诉webpack哪些库不参与打包,同时使用时的名称也得变
     new webpack.DllReferencePlugin({
         manifest: resolve(__dirname, 'dll/manifest.json')
     }),
     // 将某个文件打包输出去,并在html中自动引入该资源
     new AddAssetHtmlWebpackPlugin({
         filepath: resolve(__dirname, 'dll/jquery.js')
     })
    
  • 相关阅读:
    Quartz中时间表达式的设置-----corn表达式
    怎样使用SetTimer MFC 够具体
    MySQL server version for the right syntax to use near 'type=InnoDB' at line 1
    Oracle 11g client的安装和配置。
    VC++ CopyFile函数使用方法
    怎样将程序猿写出来的程序打包成安装包(最简单的)
    一分钟制作U盘版BT3
    xml文件格式例如以下
    关于概率性事件的产品性能和客户体验讨论
    RapeLay(电车之狼R)的结局介绍 (隐藏结局攻略)
  • 原文地址:https://www.cnblogs.com/lhongsen/p/13407461.html
Copyright © 2011-2022 走看看