vue 开发过程中,保存一次就会编译一次,如果能够减少编译的时间,哪怕是一丁点,也能节省不少时间。开发过程中个人编写的源文件才会频繁变动,而一些库文件我们一般是不会去改动的。如果能把这些库文件提取出来,就能减少打包体积,加快编译速度。本文主要讲述在 vue-cli3 中利用 DllPlugin 来进行预编译。
1、安装相关插件
yarn add webpack-cli@^3.2.3 add-asset-html-webpack-plugin@^3.1.3 clean-webpack-plugin@^1.0.1 --dev
2、编写配置文件
在项目根目录下新建 webpack.dll.conf.js,输入以下内容。
const path = require('path') const webpack = require('webpack') const CleanWebpackPlugin = require('clean-webpack-plugin') // dll文件存放的目录 const dllPath = 'public/vendor' module.exports = { entry: { // 需要提取的库文件 vendor: ['vue', 'vue-router', 'vuex', 'axios', 'element-ui'] }, output: { path: path.join(__dirname, dllPath), filename: '[name].dll.js', // vendor.dll.js中暴露出的全局变量名 // 保持与 webpack.DllPlugin 中名称一致 library: '[name]_[hash]' }, plugins: [ // 清除之前的dll文件 new CleanWebpackPlugin(['*.*'], { root: path.join(__dirname, dllPath) }), // 设置环境变量 new webpack.DefinePlugin({ 'process.env': { NODE_ENV: 'production' } }), // manifest.json 描述动态链接库包含了哪些内容 new webpack.DllPlugin({ path: path.join(__dirname, dllPath, '[name]-manifest.json'), // 保持与 output.library 中名称一致 name: '[name]_[hash]', context: process.cwd() }) ] }
3、生成 dll
在 package.json 中加入如下命令
"scripts": { ... "dll": "webpack -p --progress --config ./webpack.dll.conf.js" },
控制台运行
yarn run dll
4、忽略已编译文件
为了节约编译的时间,这时间我们需要告诉 webpack 公共库文件已经编译好了,减少 webpack 对公共库的编译时间。在项目根目录下找到 vue.config.js ( 没有则新建 ),配置如下:
const webpack = require('webpack') module.exports = { ... configureWebpack: { plugins: [ new webpack.DllReferencePlugin({ context: process.cwd(), manifest: require('./public/vendor/vendor-manifest.json') }) ] } }
5、index.html 中加载生成的 dll 文件
经过上面的配置,公共库提取出来了,编译速度快了,但如果不引用生成的 dll 文件,网页是不能正常工作的。
打开 public/index.html,插入 script 标签。
... <script src="./vendor/vendor.dll.js"></script>
到此公用库提取完成,但总觉得最后一部手工插入 script 不太优雅,下面介绍下如何自动引入生成的 dll 文件。
打开 vue.config.js 在 configureWebpack plugins 节点下,配置 add-asset-html-webpack-plugin
const path = require('path') const webpack = require('webpack') const AddAssetHtmlPlugin = require('add-asset-html-webpack-plugin')
module.exports = { ... configureWebpack: { plugins: [ new webpack.DllReferencePlugin({ context: process.cwd(), manifest: require('./public/vendor/vendor-manifest.json') }), // 将 dll 注入到 生成的 html 模板中 new AddAssetHtmlPlugin({ // dll文件位置 filepath: path.resolve(__dirname, './public/vendor/*.js'), // dll 引用路径 publicPath: './vendor', // dll最终输出的目录 outputPath: './vendor' }) ] } }
总结
以上所述是小编给大家介绍的vue-cli3 DllPlugin 提取公用库的方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对小牛知识库网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!
1. 前言 本小节我们将带大家学习如何在项目中使用第三方库。在日常的开发中,我们正在大量的使用第三方库。学会使用第三方库可以说是前端工程师最基本的技能。其实,使用第三方库非常简单,绝大部分库的文档中都会教我们如何使用。接下来我们用几个案例来学习使用第三方库。 2. ElementUI 的使用 我们打开ElementUI的官网,根据官网的教程一步步学习。 2.1 安装 在 Vue-cli 创建的项目
以下命令生成一个包含公钥和私钥的文件: 资料来源:这里 使用OpenSSL,私钥也包含公钥信息,因此公钥不需要单独生成 如何从私钥中提取公钥。pem文件? 谢谢
本文向大家介绍在vue中使用公共过滤器filter的方法,包括了在vue中使用公共过滤器filter的方法的使用技巧和注意事项,需要的朋友参考一下 平时我们在vue中使用过滤器时,在模板中定义的过滤器不能在其他模板中使用,所以要在每个模板中定义自己的filter,这样就会出现很多重复的代码,那有没有办法定义一个公用的filter,减少代码的重复呢? 下面就给大家展示下使用最多且有效的方法吧! •首
本文向大家介绍vue 将页面公用的头部组件化的方法,包括了vue 将页面公用的头部组件化的方法的使用技巧和注意事项,需要的朋友参考一下 本文介绍了vue 将页面公用的头部组件化的方法,分享给大家,具体如下: 呃……重新捡起前面用vue-cli快速生成的项目。 之前是做过一个多页面的改造,以及引入vux的ui组件,这次在这个项目的基础上,再来聊聊vue中的component。 别问我为啥总是写关于v
问题内容: 我需要提取网址的顶级域名,我得到了他的 和Java实现中,我找不到任何示例来提取域名 任何人都可以告诉我如何使用此库来实现示例.... 问题答案: 在我看来,InternetDomainName.topPrivateDomain()确实 可以满足 您的需求。Guava维护一个公共后缀列表(基于Mozilla在publicsuffix.org上的列表),该列表用于确定主机的公共后缀部分是
本文向大家介绍Vue动态获取width的方法,包括了Vue动态获取width的方法的使用技巧和注意事项,需要的朋友参考一下 vue里想用Bootstrap的进度条, 主要是把style="width: 20%;"变成动态获取的。 这样写就好了。 也可是这样: 用vue 获取动态元素的宽度。首页,要放在this.$nextTick里面,其实要使用$el挂载此元素,下面贴代码吧: 先定义一个ref=c