首页 > 其他分享 >webpack生产环境优化:dll

webpack生产环境优化:dll

时间:2023-08-28 22:58:03浏览次数:51  
标签:jquery js webpack html dll 优化 打包

转载请注明 来源:http://www.eword.name/
Author:eword
Email:[email protected]

webpack生产环境优化:dll

  • dll动态链接库
    • 目的:单独的将多个指定的第三方库打包成一个chunk。
    • 意义:将不同的库分割开来,实现代码分割和避免重复打包,在节省打包时间的同时方便按需加载和预加载的实现。

一、打包指定的第三方库

1.1、创建dll打包配置文件

根目录下创建webpack.dll.js配置文件

/* 
    路径:./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'

}

1.2、打包dll

# 根据webpack.dll.js配置的内容打包
> webpack --config webpack.dll.js

1.3、工程文件目录

.
├── dll    // 打包后生成的目录
│   ├── jquery.js    // 根据webpack.dll.js配置独立打包出来的jquery
│   └── manifest.json   //映射文件
├── src
│   ├── index.html
│   └── index.js
├── webpack.config.js
└── webpack.dll.js    //打包配置文件

二、应用单独打包的dll

2.1、修改webpack.config.js

/*
    webpack.config.js webpack的配置文件
    路径: ./webpack.config.js
*/

// resolve用来拼接绝对路径的方法
const { resolve } = require('path');
// 引入打包 html 文件的插件 html-webpack-plugin
const HtmlWebpackPlugin = require('html-webpack-plugin');
// 引入webpack
const webpack = require('webpack');
// 引入add-asset-html-webpack-plugin
const AddAssetHtmlWebpackPlugin =require('add-asset-html-webpack-plugin');

module.exports = {
    // webpack配置
    // 入口起点文件
    entry: './src/index.js',
    // 输出
    output: {
        // 输出文件名
        filename: 'built.js',
        // 输出路径
        // __dirname nodejs的变量,代表当前文件的目录绝对路径
        path: resolve(__dirname, 'build'),
    },
    // loader的配置
    module: {
        rules: [
            // 详细loader配置
            //不同文件必须配置不同loader处理
            // 打包 css 文件的详细loader配置
            {
                // 匹配哪些文件
                test: /\.css$/,
                // 使用哪些loader进行处理
                use: [
                    // use数组中loader执行顺序:从右到左,从下到上依次执行
                    // 创建style标签,将js中的样式资源插入进行,添加到head中生效
                    'style-loader',
                    // 将css文件变成commonjs模块加载js中,里面内容是样式字符串
                    'css-loader',

                ],
            },
            //打包less 文件的详细loader配置
            {
                //匹配哪些文件
                test: /\.less$/,
                //使用哪些loader进行处理
                use: [
                    // use数组中loader执行顺序:从右到左,从下到上依次执行
                    //创建style标签,将js中的样式资源插入进行,添加到head中生效
                    'style-loader',
                    //将css文件变成commonjs模块加载js中,里面内容是样式字符串
                    'css-loader',
                    //将less文件编译成css文件
                    //需要下载less-loader和less
                    'less-loader'
                ]
            },
        ]
    },
    // plugins的配置
    plugins: [
        // 详细的plugins配置
        // 详细的plugins配置
        // html-webpack-plugin
        // new HtmlWebpackPlugin() 功能:默认会创建一个空的HTML, 自动引入打包输出的所有资源(JS/CSS)
        //需求:需要有结构的HTML文件
        new HtmlWebpackPlugin({
            //复制../src/index.html'文件,并自动引入打包输出的所有资源(JS/CS5)
            template: './src/index.html'
        }),
        // 告诉webpack哪些库不参与打包,同时使用时的名称也得变~
        new webpack.DllReferencePlugin({
            manifest: resolve(__dirname, 'dll/manifest.json')

        }),
        // 将某个dll文件打包输出去,并在html中自动引入该资源
        new AddAssetHtmlWebpackPlugin({
            filepath: resolve(__dirname, 'dll/jquery.js')
        })
    ],
    // 模式  development  开发环境,production 生产环境
    mode: 'development',
    // 生产环境下会自动压缩js代码
    // mode: 'production'

};

核心配置

/*
    webpack.config.js webpack的配置文件
    路径: ./webpack.config.js
*/

    ……
    
// 引入webpack
const webpack = require('webpack');
// 引入add-asset-html-webpack-plugin
const AddAssetHtmlWebpackPlugin =require('add-asset-html-webpack-plugin');

    ……

    // plugins的配置
    plugins: [
        // 详细的plugins配置

        // 告诉webpack哪些库不参与打包,同时使用时的名称也得变~
        new webpack.DllReferencePlugin({
            manifest: resolve(__dirname, 'dll/manifest.json')

        }),
        // 将某个dll文件打包输出去,并在html中自动引入该资源
        new AddAssetHtmlWebpackPlugin({
            filepath: resolve(__dirname, 'dll/jquery.js')
        })
    ],

webpack.DllReferencePlugin:独立打包的dll库,不在打包到输出的chunk中。
AddAssetHtmlWebpackPlugin:在html中引入指定独立打包的dll库资源,并将该资源独立打包出去。

2.2、其他工程文件

<!-- ./src index.html -->
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>webpack</title>
</head>
<body>
    <h1 id="title">hello dll</h1>
</body>
</html>
// 入口文件
// ./src/index.js
import { $ } from 'jquery';

console.log($);

2.3、构建打包

> npx webpack 

2.4、工程文件目录

.
├── build   //构建打包生成的目录
│   ├── built.js     
│   ├── index.html
│   └── jquery.js   //独立打包,并在html中被引入的jquery库资源
├── dll    // 打包后生成的目录
│   ├── jquery.js    // 根据webpack.dll.js配置独立打包出来的jquery
│   └── manifest.json   //映射文件
├── src
│   ├── index.html
│   └── index.js       // 入口文件,使用jquery包
├── webpack.config.js
└── webpack.dll.js    //打包配置文件
// 入口文件
// ./src/index.js
import { $ } from 'jquery';

console.log($);
<!-- 生成的 index.html 文件,./build/index.html -->
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>webpack</title>
</head>
<body>
    <h1 id="title">hello dll</h1>
    <script src="built.js"></script>
    <!-- AddAssetHtmlWebpackPlugin 插件引入的资源 -->
    <script src="jquery.js"></script>
</body>
</html>

标签:jquery,js,webpack,html,dll,优化,打包
From: https://www.cnblogs.com/shylock/p/webpack202308276.html

相关文章

  • webpack生产环境优化:tree shaking
    转载请注明来源:http://www.eword.name/Author:ewordEmail:[email protected]生产环境优化:treeshakingtreeshaking:去除无用代码前提:1.必须使用ES6模块化2.开启production环境1一、核心配置```js/*webpack.config.jswebpack的配置文件......
  • webpack生产环境优化:code split
    转载请注明来源:http://www.eword.name/Author:ewordEmail:[email protected]生产环境优化:codesplitcodesplit代码分割,既将打包后的js分割成多份js文件,方便后期实现“并行加载”、“按需加载”等,提高性能。一、核心配置建议使用方式二的单入口模式,并按需使用......
  • webpack生产环境优化:PWA
    转载请注明来源:http://www.eword.name/Author:ewordEmail:[email protected]生产环境优化:PWAPWA可简称为“离线可访问技术”。一、下载插件PWA:渐进式网络开发应用程序(离线可访问),需要插件workbox-webpack-plugin的支持。workbox--〉workbox-webpack-plugin......
  • webpack生产环境优化:多线程打包
    转载请注明来源:http://www.eword.name/Author:ewordEmail:[email protected]生产环境优化:多线程打包多线程打包主要用于需要打包的文件较多的情况下提高打包效率,缩短打包时间。注意:开启多进程打包时,进程开启大概需要600ms,进程通信也有开销。建议:只有工作消耗时间......
  • webpack生产环境优化:懒加载和预加载
    转载请注明来源:http://www.eword.name/Author:ewordEmail:[email protected]生产环境优化:懒加载和预加载一、直接加载浏览器一打开,直接加载了test.js这里使用了直接导入方式。直接导入:import{mul}from'./test';//./src/js/index.js//入口文件console.......
  • webpack生产环境优化:externals
    转载请注明来源:http://www.eword.name/Author:ewordEmail:[email protected]生产环境优化:externalsexternals配置主要是为了防止某些通过CDN引入的包被打包到输出的bundle中。一、核心配置/*webpack.config.jswebpack的配置文件路径:./webpack.config......
  • webpack生产环境优化:dll
    转载请注明来源:http://www.eword.name/Author:ewordEmail:[email protected]生产环境优化:dlldll动态链接库目的:单独的将多个指定的第三方库打包成一个chunk。意义:将不同的库分割开来,实现代码分割和避免重复打包,在节省打包时间的同时方便按需加载和预加载的实现......
  • 接口查询性能优化-缓存
    查询性能优化缓存种类mybatis一级缓存mybatis二级缓存本地缓存各个节点的数据不同步分布式缓存redis前端h5的缓存本地缓存session缓存mybatis一级缓存一个方法中对同一个sql,查询了多次当在这个方法上加@transactional后续的查......
  • UE4.27, Debug issues, "变量已被优化掉,因而不可用"
    调试时添加监控后,变量未被成功监控,显示"变量已被优化掉,因而不可用" 所使用的解决办法从解决方案配置的下拉菜单中选择DebugGameEditor  感谢阅读,敬请斧正......
  • FX110: 花点时间寻找适合自己的交易风格,优化利润
    交易风格通常与交易者的个性相关。在选择交易策略和制定交易计划之前,对性格和生活方式进行内部反思非常重要 。这是因为使用与你的性格相反的交易风格会导致日后难以坚持你的交易计划。当交易者找到最适合他们的交易风格时,这种风格通常会持续很长时间。在交易中的表现取决于你如何......