国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Webpack DLL 配置教程

terro / 1915人閱讀

摘要:原理文件又稱為動(dòng)態(tài)鏈接庫(kù)文件,它通常作為應(yīng)用程序可執(zhí)行代碼的一部分,供應(yīng)用程序在運(yùn)行時(shí)進(jìn)行調(diào)用。優(yōu)化以上程序只是為了快速入手與搭建,需要優(yōu)化的地方還有很多,在此簡(jiǎn)單的列舉幾點(diǎn),供大家參考。

原理

DLL文件又稱為動(dòng)態(tài)鏈接庫(kù)文件,它通常作為應(yīng)用程序可執(zhí)行代碼的一部分,供應(yīng)用程序在運(yùn)行時(shí)進(jìn)行調(diào)用。

在Webpack中,內(nèi)置的DllPlugin與DllReferencePlugin插件可以通過使用DLL來大幅提高構(gòu)建性能,以下是DLL機(jī)制流程圖:

初始化項(xiàng)目

為了便于實(shí)驗(yàn),我們通過使用create-react-app創(chuàng)建項(xiàng)目并eject出webpack配置:

npx create-react-app react-dll-demo
cd react-dll-demo && npm run eject

由于默認(rèn)配置隱藏了編譯信息,打開webpackDevServer.config.js,將quiet: true改為false,再啟動(dòng)一下項(xiàng)目,找出我們需要的信息:

Version: webpack 4.28.3
Time: 6985ms
Built at: 2019-02-21 10:46:42
                         Asset       Size        Chunks             Chunk Names
           asset-manifest.json  232 bytes                [emitted]
                    index.html   1.65 KiB                [emitted]
          static/js/0.chunk.js   4.21 MiB             0  [emitted]
           static/js/bundle.js   30.9 KiB  runtime~main  [emitted]  runtime~main
       static/js/main.chunk.js   47.4 KiB          main  [emitted]  main
static/media/logo.5d5d9eef.svg   2.61 KiB                [emitted]
DLLPlugin

首先在package.json的scripts字段添加一條腳本:

{
  "build:dll": "webpack --config config/webpack.dll.config.js --mode production"
}

然后創(chuàng)建配置文件:

// config/webpack.dll.config.js

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

module.exports = {
  entry: {
    react: ["react", "react-dom"]
  },
  output: {
    filename: "[name].dll.js",
    path: path.join(__dirname, "../public/dll"),
    libraryTarget: "var",
    library: "_dll_[name]_[hash]"
  },
  plugins: [
    new webpack.DllPlugin({
      path: path.join(__dirname, "../public/dll", "[name].manifest.json"),
      name: "_dll_[name]_[hash]"
    })
  ]
};

執(zhí)行npm run build:dll,CLI應(yīng)該會(huì)自動(dòng)提示你安裝webpack-cli,運(yùn)行完成后可以看到以下文件:

public/dll
├── react.dll.js
└── react.manifest.json
DLLReferencePlugin

打開config/webpack.config.js,在根對(duì)象plugins字段中寫入該插件:

{
  plugins: [
    // ...
    new webpack.DllReferencePlugin({
        manifest: require(path.join(
        __dirname,
        "../public/dll/react.manifest.json"
        ))
    }),
  ]
}

最后一個(gè)步驟,在index.html我們先手動(dòng)引入dll依賴:

    ...
    
...

此時(shí)重新運(yùn)行程序,等待項(xiàng)目正常運(yùn)行,再檢查一下編譯信息:

Version: webpack 4.28.3
Time: 4883ms
Built at: 2019-02-21 11:19:11
                         Asset       Size        Chunks             Chunk Names
           asset-manifest.json  232 bytes                [emitted]
                    index.html   1.69 KiB                [emitted]
          static/js/0.chunk.js   1.82 MiB             0  [emitted]
           static/js/bundle.js   30.9 KiB  runtime~main  [emitted]  runtime~main
       static/js/main.chunk.js   52.1 KiB          main  [emitted]  main
static/media/logo.5d5d9eef.svg   2.61 KiB                [emitted]

很顯然的看到,在development模式下,構(gòu)建時(shí)間降低了2s,打包大小降低了2.4M,相信將DLL運(yùn)用到項(xiàng)目工程中,你能收獲到更多的驚喜。

優(yōu)化

以上程序只是為了快速入手與demo搭建,需要優(yōu)化的地方還有很多,在此簡(jiǎn)單的列舉幾點(diǎn),供大家參考。

自動(dòng)注入編譯文件到HTML

通過安裝html-webpack-include-assets-plugin插件,可以自動(dòng)將相應(yīng)文件注入到index.html中,就可以避免手動(dòng)進(jìn)行更改了:

// config/webpack.config.js
const HtmlIncludeAssetsPlugin = require("html-webpack-include-assets-plugin");
// ...
{
  plugins: [
    new HtmlIncludeAssetsPlugin({
      assets: ["dll/react.dll.js"],
      append: false // 在其他資源前添加
    }),
  ]
}
DLL的緩存問題與自動(dòng)加載

我們通常不會(huì)對(duì)html文件做緩存,每次發(fā)版本時(shí)采用增量發(fā)布,只要html的依賴文件名變了,則會(huì)重新去解析靜態(tài)資源列表。除此之外,還需要提供一個(gè)函數(shù),自動(dòng)去加載文件夾內(nèi)的多入口dll文件,以下為核心代碼:

config/dllHelper.js:

// config/dllHelper.js
const webpack = require("webpack");
const path = require("path");
const fs = require("fs");
const dllConfig = require("./webpack.dll.config");

// 根據(jù)entry生成DllReferencePlugin列表
function genDllReferences() {
  return Object.keys(dllConfig.entry).map(
    name =>
      new webpack.DllReferencePlugin({
        manifest: require(path.join(
          __dirname,
          "../public/dll",
          `${name}.manifest.json`
        ))
      })
  );
}

// 生成dll文件的靜態(tài)資源路徑
function loadDllAssets() {
  return fs
    .readdirSync(path.resolve(__dirname, "../public/dll"))
    .filter(filename => filename.match(/.dll.js$/))
    .map(filename => `dll/${filename}`);
}

module.exports = {
  loadDllAssets,
  genDllReferences
};

config/webpack.dll.config.js:

// 
{
  ...
  output: {
    filename: "[name].[hash:8].dll.js"
  }
}

config/webpack.config.js:

const dllHelper = require("./dllHelper");
...
{
  plugins: [
    ...dllHelper.genDllReferences(),
    new HtmlIncludeAssetsPlugin({
      assets: dllHelper.loadDllAssets(), 
      append: false
    })
  ]
}
構(gòu)建前清空文件夾

若DLLPlugiun的entry發(fā)生變化,則dll內(nèi)的文件可能會(huì)越來越多,因此我們需要在構(gòu)建dll前清空文件夾,在這里推薦這兩個(gè)package:

npm-run-all,在scripts可串行或并行執(zhí)行script

rimraf,nodejs刪除文件利器

首先安裝相應(yīng)依賴:yarn add -D rimraf npm-run-all,然后修改package.json:

scripts: {
  "make:dll": "npm-run-all clear:dll build:dll",
  "build:dll": "webpack --config config/webpack.dll.config.js --mode production",
  "clear:dll": "rimraf public/dll",
}

之后在變動(dòng)DLL時(shí),一定要記得執(zhí)行:npm run make:dll

其他

Demo倉(cāng)庫(kù)地址:GitHub - vv13/react-dll-demo

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/101968.html

相關(guān)文章

  • Vue-cli3 簡(jiǎn)qian易yi教程

    摘要:原文地址對(duì)于沒有了解過的童鞋,建議先去看看官方的教程傳送門新版本的新特性插件使用的插件,可以很快的搭建一個(gè)項(xiàng)目的結(jié)構(gòu)。使用時(shí)直接引入即可。的界面讓管理項(xiàng)目變得更加簡(jiǎn)單。如遷移過程中有任何疑問,可以留言一起探討。 原文地址 對(duì)于沒有了解過 vue-cli3 的童鞋,建議先去看看官方的教程: 傳送門 新版本的新特性 1. 插件 使用 cli 的插件,可以很快的搭建一個(gè)項(xiàng)目的結(jié)構(gòu)。如 ax...

    jemygraw 評(píng)論0 收藏0
  • webpack dll打包重復(fù)問題優(yōu)化

    摘要:關(guān)于的使用,我這里不做過多介紹,網(wǎng)上都有,一擼一大把,今天我要說的是在使用過程中出現(xiàn)的一個(gè)包依賴問題,這個(gè)問題導(dǎo)致打出來的包會(huì)包含重復(fù)的代碼。 關(guān)于webpack dll的使用,我這里不做過多介紹,網(wǎng)上都有,一擼一大把,今天我要說的是在使用dll plugin過程中出現(xiàn)的一個(gè)包依賴問題,這個(gè)問題導(dǎo)致打出來的包會(huì)包含重復(fù)的代碼。 優(yōu)化背景 最近在給公司項(xiàng)目?jī)?yōu)化的時(shí)候,由于內(nèi)部CDN上傳文...

    NicolasHe 評(píng)論0 收藏0
  • webpack多頁(yè)應(yīng)用架構(gòu)系列(十一):預(yù)打包Dll,實(shí)現(xiàn)webpack音速編譯

    摘要:本文首發(fā)于的技術(shù)博客實(shí)用至上,非經(jīng)作者同意,請(qǐng)勿轉(zhuǎn)載。原文地址如果您對(duì)本系列文章感興趣,歡迎關(guān)注訂閱這里前言書承上文多頁(yè)應(yīng)用架構(gòu)系列十如何打造一個(gè)自定義的。終于,發(fā)現(xiàn)了這一大殺器,打包時(shí)間過長(zhǎng)的問題得到完美解決。 本文首發(fā)于Array_Huang的技術(shù)博客——實(shí)用至上,非經(jīng)作者同意,請(qǐng)勿轉(zhuǎn)載。原文地址:https://segmentfault.com/a/119000000710437...

    sixleaves 評(píng)論0 收藏0
  • vue-cli配置webpack dll

    摘要:一緩存失效改變了的一點(diǎn)兒代碼,打包的就會(huì)改變導(dǎo)致每次發(fā)布,的緩存都會(huì)失效。為了解決上述問題,在網(wǎng)上查找資料后,找到使用這個(gè)方案。三對(duì)比結(jié)果優(yōu)化前筆記本上打包時(shí)間為,優(yōu)化后筆記本打包時(shí)間為,同時(shí)也增加了這些庫(kù)的緩存。 問題 在前端項(xiàng)目中,我們希望第三方庫(kù)(vendors)和自己寫的代碼可以分開打包,vue-cli也幫我們配好了webpack的CommonsChunkPlugin,但是在使...

    justCoding 評(píng)論0 收藏0
  • vue-cli配置預(yù)編譯

    摘要:轉(zhuǎn)載文章公司的平臺(tái)功能越堆越多,打包也越來越費(fèi)勁,一次十幾分鐘,運(yùn)維很不爽,搗鼓了一下預(yù)編譯,試了一下大概縮短了七八分鐘,目前感覺還行,現(xiàn)在把它記下來,給需要的童鞋當(dāng)做參考,也給自己記錄一下。 (轉(zhuǎn)載文章)公司的平臺(tái)功能越堆越多,打包也越來越費(fèi)勁,一次十幾分鐘,運(yùn)維很不爽,so搗鼓了一下預(yù)編譯,試了一下大概縮短了七八分鐘,目前感覺還行,現(xiàn)在把它記下來,給需要的童鞋當(dāng)做參考,也給自己記錄...

    KnewOne 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<