分离第三方类库 DllPlugin 和 DllReferencePlugin

DLLPlugin 和 DLLReferencePlugin 用某种方法实现了拆分 bundles,同时还大大提升了构建的速度。

1.首先build文件夹添加----webpack.dll.config.js:

var path = require("path");
var webpack = require("webpack");

module.exports = {
  // 要打包的模块的数组
  entry: {
    vendor: ['vue/dist/vue.esm.js','vue-router']
  },
  output: {
    path: path.join(__dirname, '../static/js'), // 打包后文件输出的位置
    filename: '[name].dll.js',// vendor.dll.js中暴露出的全局变量名。
    library: '[name]_library' // 与webpack.DllPlugin中的`name: '[name]_library',`保持一致。
  },
  plugins: [
    new webpack.DllPlugin({
      path: path.join(__dirname, '.', '[name]-manifest.json'),
      name: '[name]_library', 
      context: __dirname
    }),
  ]
};

2.在package.json的scripts里加上:

"dll": "webpack --config build/webpack.dll.config.js",

3.运行npm run dll 在static/js下生成vendor-manifest.json;
4.在build/webpack.base.conf.js里加上:

// 添加DllReferencePlugin插件
  plugins: [
    new webpack.DllReferencePlugin({
      context: __dirname,
      manifest: require('./vendor-manifest.json')
    })
  ],

5.然后在index.html中引入vendor.dll.js:

<div id="app"></div>
<script src="./static/js/vendor.dll.js"></script>

6、删掉 commonsChunkPlugin相关配置,此处建议注释

至此,配置之后的:
可以看到npm run build后的时间大幅度减少,在dist打包体积上也比之前的小。在项目优化中,可以很大程度上加快项目的构建速度和减少项目的打包体积。

补充知识:commonsChunk之所以大,是每次都需要重新打包,而dist打包快,是因为首次打包好依赖的js,后面只需要打包我们改动的js,相当于热部署;

继续优化
1、依赖从package.json读取,而不是手写;
2、带上hash,以免线上缓存问题;
3、带上hash后,自动修改index.html里的引用;
4、命令太长了,最好yarn run一下就好了

webpack.dll.config.js

const path = require('path')
const webpack = require('webpack')
const AssetsPlugin = require('assets-webpack-plugin')
const package = require('./package.json')
let dependencies = Object.keys(package.dependencies) || []
//如果使用了chrome的vue-devtool,那打包的时候把vue也排除掉,因为压缩过的vue是不能使用vue-devtool的
dependencies = dependencies.length > 0 ? dependencies.filter(item => item !== 'vue') : []

module.exports = {
  // 要打包的模块的数组
  entry: {
    vendor: dependencies
  },
  output: {
    path: path.join(__dirname, '../static'), // 打包后文件输出的位置
    filename: 'dll.[name]_[hash:6].js',// vendor.dll.js中暴露出的全局变量名。
    library: '[name]_[hash:6]' // 与webpack.DllPlugin中的`name: '[name]_library',`保持一致。
  },
  plugins: [
    new webpack.DllPlugin({
      path: path.join(__dirname, '.', '[name]-manifest.json'),//. 指当前目录
      name: '[name]', 
      context: __dirname
    }),
    new AssetsPlugin({
      filename: 'bundle-config.json',
      path: './'
    })
  ]
}

在build文件夹新建一个dll.js,读一下配置,跑一下webpack,输出点日志

var ora = require('ora')
var chalk = require('chalk')
var webpack = require('webpack')
var webpackConfig = require('./webpack.dll.config')//"dll": "webpack --config build/webpack.dll.config.js"   

var spinner = ora('building for dependencies...')
spinner.start()

webpack(webpackConfig, function (err, stats) {
  spinner.stop()
  if (err) throw err
  process.stdout.write(stats.toString({
    colors: true,
    modules: false,
    children: false,
    chunks: false,
    chunkModules: false
  }) + '\n\n')

  console.log(chalk.cyan('  Build complete.\n'))
})

保存以后,到package.json里添加命令,“dll”: “node build/dll.js”
运行 yarn dll 完成~

参考资料
webpack踩坑记——DllPlugin和DllReferencePlugin
webpack实践——DLLPlugin 和 DLLReferencePlugin的使用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Jython是一个在Java平台上运行的Python解释器,它允许开发人员使用Python语法编写代码,并利用Java的庞大类库和丰富的生态系统。在Jython中,可以使用Java的第三方类库来扩展其功能,包括用于网络请求的request库。 request库是一个流行的用于发送HTTP请求的Python第三方库,它提供了一种简单而优雅的方式来处理HTTP请求和响应。在Jython中使用request库,开发人员可以使用其丰富的方法和选项来发送GET、POST、PUT、DELETE等类型的请求,并处理返回的响应。 使用request库发送请求的基本流程如下: 1. 导入request库:在代码中导入request库,使其可用于发送请求。 2. 构建请求:使用request库提供的方法,构建HTTP请求,包括URL、HTTP方法、请求头、请求体等。 3. 发送请求:使用request库的发送方法,发送构建好的请求,并获得响应。 4. 处理响应:根据返回的响应,处理响应头、响应体等信息。 使用request库的优点包括: 1. 简洁易用:request库提供了简单而直观的API,使发送HTTP请求变得容易。 2. 功能丰富:request库支持多种HTTP方法、文件上传、Session管理、Cookie支持等功能。 3. 强大的生态系统:作为一个流行的Python库,request有很多扩展包和插件,可以满足各种需求。 需要注意的是,Jython在运行Python代码时,实际上是通过调用Java类库来完成的。因此,在使用第三方类库时,需要确保该类库是与Jython兼容的,并且能够在Jython的Java环境中正确运行。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值