摘要:今天就來(lái)簡(jiǎn)單講講它們的使用。這個(gè)插件的作用是創(chuàng)建文件和文件。使用其他的腳手架需要根據(jù)具體情況考慮。不要使用,否則在運(yùn)行時(shí)會(huì)報(bào)錯(cuò)誤。的和的要保持一致。
這段時(shí)間在對(duì)公司的打包構(gòu)建速度和app.js文件大小進(jìn)行優(yōu)化。使用到了webpack的DllPlugin和DllReferencePlugin。今天就來(lái)簡(jiǎn)單講講它們的使用。
其實(shí)對(duì)于這兩個(gè)插件網(wǎng)上已經(jīng)有很多各種各樣的文章了。不過(guò)筆者認(rèn)為,那些文章都寫(xiě)得很棒,但是對(duì)于部分需要注意的地方都沒(méi)有說(shuō)明。這里筆者就根據(jù)自己的理解講講個(gè)人的理解。如果有什么不對(duì)的地方希望能有人指出,小弟在此先謝過(guò)了。
DllPlugin首先我們來(lái)講講DLLPlugin這個(gè)插件吧。這個(gè)插件的作用是創(chuàng)建dll文件和manifest文件。dll文件就是就是我們需要引入的文件,manifest文件是引導(dǎo)webpack引入到當(dāng)前項(xiàng)目的文件。好吧,直接貼代碼:
webpack.dll.conf.js
var path = require("path") var webpack = require("webpack") var CleanWebpackPlugin = require("clean-webpack-plugin") var config = require("../config") var __root = xxx // 這里是你的根路徑 // 這里是靜態(tài)資源路徑,如果使用vue-cli的,就是根目錄下的static目錄; // 如果使用@vue/cli的就是根目錄下的public目錄。使用其他的腳手架需要根據(jù)具體情況考慮。 var static = xxx module.exports = { context: __root, // 這里配置的context就是后面dll的context entry: { "core": ["vue", "vue-router", "vuex"], "asset": ["axios", "fastclick"] }, output: { path: path.resolve(static, "lib"), filename: "[name]-[chunkhash:7].dll.js", library: "lib_[name]", // *** 這里不要添加libraryTarget,否則webpack打包時(shí)會(huì)出錯(cuò)。 // (提示是__WEBPACK__EXTERNAL__MODULE__xxx未定義) *** // libraryTarget: "umd" }, resolve: { modules: [path.resolve(__root, "node_modules")], extensions: [".js", ".json"], alias: { "vue$": "vue/dist/vue.esm.js" } }, // 這里沒(méi)有寫(xiě)loaders,如果有需要可以自行添加loaders plugins: [ // *** 這里很關(guān)鍵 *** new webpack.DllPlugin({ // 因?yàn)樯厦鎸?xiě)了context,所以這里可以不指定context // 這里manifest的名字必須要有變量,因?yàn)轭?lèi)似上面的core和asset會(huì)分別創(chuàng)建一個(gè)manifest, // 如果名稱(chēng)相同,manifest會(huì)生成不規(guī)范的json,在引用時(shí)會(huì)報(bào)錯(cuò)。 path: path.resolve(__root, "static/manifest/[name].manifest.json"), name: "lib_[name]" // *** 這里的名字必須與output.library一致 *** }), // 這個(gè)是用來(lái)穩(wěn)定hash值,防止出現(xiàn)webpack的hash出現(xiàn)莫名的變化 new webpack.HashedModuleIdsPlugin(), new webpack.NamedChunksPlugin() ... 其他插件 ] }
上面就是webpack.dll.conf.js的主要配置。執(zhí)行之后會(huì)在static文件夾(在vue-cli生成的項(xiàng)目中用于存放不需要webpack構(gòu)建的靜態(tài)文件【@vue/cli中的目錄名為Public】)下生成兩個(gè)文件夾(lib文件夾和mainfest文件夾)。其中l(wèi)ib下的文件為我們已經(jīng)打包好的組件庫(kù),mainfest下的文件在引入項(xiàng)目時(shí)有用(是一個(gè)JSON文件)。
DllReferencePluginwebpack.conf.js
var path = require("path") // 獲取dll文件的manifest function getDllManifest () { var plugins = [] Object.keys({ "core": ["vue", "vue-router", "vuex"], "asset": ["axios", "fastclick"] }).forEach((name) => { plugins.push( new webpack.DllReferencePlugin({ context: __root, // 這里的context必須與DllPlugin中的context保持一致 manifest: path.resolve(__root, "static/manifest/[name].manifest.json").replace(/[name]/gi, name) }) ) }) return plugins } module.exports = { entry: { app: "./src/main.js" }, output: { path: path.resolve(__dirname, "..") filename: "js/[name]js" }, ... 其他代碼 plugins: [ // *** 所以這里可能會(huì)引入多個(gè)DllReferencePlugin,具體要看有幾個(gè)manifest文件了。*** ...getDllManifest(), new HtmlWebpackPlugin({ filename: utils.assetsPath("page/retail.html"), template: path.join(config.dev.page, "retail.html"), inject: true, minify: { removeComments: true, collapseWhitespace: true, removeAttributeQuotes: true // more options: // https://github.com/kangax/html-minifier#options-quick-reference }, // necessary to consistently work with multiple chunks via CommonsChunkPlugin chunksSortMode: "dependency" }), // dll文件需要插件將其引入到html文件中,以方便后續(xù)使用 new HTMLWebpackIncludeAssetsPlugin({ append: false, publicPath: config.build.assetsPublicPath, assets: [{ path: config.build.assetsSubDirectory, glob: "**/*.js", globPath: config.dll.static }], }), // 將dll文件拷貝到你的dist目錄下 new CopyWebpackPlugin([ { // 這里是dll文件當(dāng)前所在的文件目錄 from: static, // 這里是生產(chǎn)環(huán)境的資源地址 to: config.build.assetsSubDirectory, // 過(guò)濾static中的部分文件 ignore: [".*", "manifest/*"] } ]) ] }
getDllManifest方法是將打包好的庫(kù)引入到項(xiàng)目中(就是在html中生成script標(biāo)簽的方式引入,它會(huì)在app.js之前生成,保證代碼執(zhí)行順序的正確性),并保證構(gòu)建工具不會(huì)再次對(duì)它進(jìn)行打包。以上就是生成和引用dll文件的配置。
注:
output.library必須與DllPlugin配置中的name字段保持統(tǒng)一。
不要使用libraryTarget,否則在運(yùn)行時(shí)會(huì)報(bào)__WEBPACK__EXTERNAL__MODULE__xxx is not defined錯(cuò)誤。
DllPlugin的context和DllReferencePlugin的context要保持一致。
manifest的名字最好是可配置的,這樣方便生成多個(gè)dll文件。
如果有多個(gè)dll文件,需要添加多個(gè)DllReferencePlugin插件去分別處理。
推薦講webpack構(gòu)建優(yōu)化的
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/95946.html
摘要:沒(méi)使用你會(huì)發(fā)現(xiàn)這個(gè)時(shí)候,和都非常的大,因?yàn)樗麄兌剂艘粋€(gè)很大的包,而使用了,則將這個(gè)大包抽離出來(lái)成為一個(gè)。如果是在手機(jī)開(kāi)發(fā)中,便可以將頻繁修改的文件和不頻繁修改的文件分離,這樣每次更新只需要替換部分的包。 Webpack DllPlugin 和 DllReferencePlugin 1.插件的作用 是一種分包的解決方案,它可以將部分代碼抽出來(lái),單獨(dú)形成一個(gè)插件包,類(lèi)似windows系統(tǒng)中...
摘要:沒(méi)使用你會(huì)發(fā)現(xiàn)這個(gè)時(shí)候,和都非常的大,因?yàn)樗麄兌剂艘粋€(gè)很大的包,而使用了,則將這個(gè)大包抽離出來(lái)成為一個(gè)。如果是在手機(jī)開(kāi)發(fā)中,便可以將頻繁修改的文件和不頻繁修改的文件分離,這樣每次更新只需要替換部分的包。 Webpack DllPlugin 和 DllReferencePlugin 1.插件的作用 是一種分包的解決方案,它可以將部分代碼抽出來(lái),單獨(dú)形成一個(gè)插件包,類(lèi)似windows系統(tǒng)中...
摘要:前言時(shí)光飛逝,轉(zhuǎn)眼又偷懶了一個(gè)多月什么是文件為動(dòng)態(tài)鏈接庫(kù)文件在中,許多應(yīng)用程序并不是一個(gè)完整的可執(zhí)行文件,它們被分割成一些相對(duì)獨(dú)立的動(dòng)態(tài)鏈接庫(kù),即文件,放置于系統(tǒng)中。 前言 (時(shí)光飛逝,轉(zhuǎn)眼又偷懶了一個(gè)多月) 什么是DLL DLL(Dynamic Link Library)文件為動(dòng)態(tài)鏈接庫(kù)文件,在Windows中,許多應(yīng)用程序并不是一個(gè)完整的可執(zhí)行文件,它們被分割成一些相對(duì)獨(dú)立的動(dòng)態(tài)鏈...
摘要:使用允許使用多線程進(jìn)行構(gòu)建來(lái)提升構(gòu)建的速度。在中,有大量的文件,稱(chēng)為動(dòng)態(tài)鏈接庫(kù)。文檔里面還有一句話是這樣說(shuō)的動(dòng)態(tài)鏈接庫(kù)提供了將應(yīng)用模塊化的方式,應(yīng)用的功能可以在此基礎(chǔ)上更容易被復(fù)用。 本文原文發(fā)表在:https://medium.com/@Erichain/...本文采用的 Webpack 版本為 2.0+本文源代碼地址:https://github.com/Erichain/w......
摘要:本文首發(fā)于的技術(shù)博客實(shí)用至上,非經(jīng)作者同意,請(qǐng)勿轉(zhuǎn)載。原文地址如果您對(duì)本系列文章感興趣,歡迎關(guān)注訂閱這里前言書(shū)承上文多頁(yè)應(yīng)用架構(gòu)系列十如何打造一個(gè)自定義的。終于,發(fā)現(xiàn)了這一大殺器,打包時(shí)間過(guò)長(zhǎng)的問(wèn)題得到完美解決。 本文首發(fā)于Array_Huang的技術(shù)博客——實(shí)用至上,非經(jīng)作者同意,請(qǐng)勿轉(zhuǎn)載。原文地址:https://segmentfault.com/a/119000000710437...
閱讀 1172·2021-11-11 16:55
閱讀 3061·2021-08-16 11:00
閱讀 2906·2019-08-30 15:56
閱讀 3444·2019-08-30 11:24
閱讀 3424·2019-08-30 11:05
閱讀 3540·2019-08-29 15:15
閱讀 2624·2019-08-26 13:57
閱讀 2584·2019-08-23 18:17