最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

webpack中CommonsChunkPlugin詳細(xì)教程(小結(jié))

 更新時(shí)間:2017年11月09日 09:45:42   作者:wjkang  
本篇文章主要介紹了webpack中CommonsChunkPlugin詳細(xì)教程(小結(jié)),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧

本文介紹了webpack中CommonsChunkPlugin詳細(xì)教程(小結(jié)),分享給大家,也給自己留個(gè)筆記,具體如下:

1.demo結(jié)構(gòu):

2.package.json配置:

{
 "name": "webpack-simple-demo",
 "version": "1.0.0",
 "description": "",
 "main": "index.js",
 "scripts": {
  "webpack": "webpack"
 },
 "author": "",
 "license": "ISC",
 "dependencies": {
  "jquery": "^3.1.0",
  "vue": "^1.0.26"
 },
 "devDependencies": {
  "css-loader": "^0.24.0",
  "style-loader": "^0.13.1",
  "webpack": "^1.13.2",
  "webpack-dev-server": "^1.15.1"
 }
}

3.多種打包情況(未使用CommonsChunkPlugin)

(1)單一入口,模塊單一引用

webpack.config.js

var CommonsChunkPlugin = require("webpack/lib/optimize/CommonsChunkPlugin");
module.exports = {
 entry: 
 {
  main:'./main.js',
 },
 output: {
  path:__dirname+'/dist',
  filename: 'build.js'
 },
 plugins: [
  
 ]
};

main.js

require("jquery");

demo目錄下運(yùn)行命令行 webpack或npm run webpack

jquery模塊被一起打包到build.js

(2)單一入口,模塊重復(fù)引用

webpack.config.js不變,main.js:

require("./chunk1");
require("./chunk2");

chunk1.js:

require("./chunk2");
var chunk1=1;
exports.chunk1=chunk1;

chunk2.js:

var chunk2=1;
exports.chunk2=chunk2;

main.js引用了chunk1、chunk2,chunk1又引用了chunk2,打包后:

build.js:

 ...省略webpack生成代碼
/************************************************************************/
/******/ ([
/* 0 */
/***/ function(module, exports, __webpack_require__) {

  __webpack_require__(1);
  __webpack_require__(2);


/***/ },
/* 1 */
/***/ function(module, exports, __webpack_require__) {

  __webpack_require__(2);
  var chunk1=1;
  exports.chunk1=chunk1;

/***/ },
/* 2 */
/***/ function(module, exports) {

  var chunk2=1;
  exports.chunk2=chunk2;

/***/ }
/******/ ]);

(3)多入口,模塊單一引用,分文件輸出

webpack.config.js

var CommonsChunkPlugin = require("webpack/lib/optimize/CommonsChunkPlugin");
module.exports = {
 entry: 
 {
  main:'./main.js',
  main1:'./main1.js'
 },
 output: {
  path:__dirname+'/dist',
  filename: '[name].js'
 },
 plugins: [
  
 ]
};

打包后文件main.js,main1.js 內(nèi)容與(2)build.js一致

(4)多入口,模塊單一引用,單一文件輸出

var CommonsChunkPlugin = require("webpack/lib/optimize/CommonsChunkPlugin");
module.exports = {
 entry: 
 {
  main:'./main.js',
  main1:'./main1.js'
 },
 output: {
  path:__dirname+'/dist',
  filename: 'buid.js'
 },
 plugins: [
  
 ]
};

build.js與(2)一致

(5)多入口,模塊重復(fù)引用,單文件輸出

webpack.config.js與(4)一致

main.js

require("./chunk1");
require("./chunk2");
exports.main=1;

main1.js

require("./chunk1");
require("./chunk2");
require("./main");

報(bào)錯(cuò):ERROR in ./main1.js

Module not found: Error: a dependency to an entry point is not allowed

@ ./main1.js 3:0-17

4.使用CommonsChunkPlugin

(1)單一入口,模塊單一引用,分文件輸出:

webpack.config.js

var CommonsChunkPlugin = require("webpack/lib/optimize/CommonsChunkPlugin");
module.exports = {
 entry: 
 {
  main:'./main.js',
 },
 output: {
  path:__dirname+'/dist',
  filename: '[name].js'//不使用[name],并且插件中沒有filename,這輸出文件中只用chunk.js的內(nèi)容, 
  main.js的內(nèi)容不知跑哪里去了
 },
 plugins: [
  new CommonsChunkPlugin({
    name:"chunk",
    filename:"chunk.js"http://忽略則以name為輸出文件的名字,否則以此為輸出文件名字
  })
 ]
};

main.js

require("./chunk1");
require("./chunk2");
require("jquery");

輸出文件main.js chunk.js,chunk1.js,chunck2.js,jquery都被打包到main.js里,好像并沒有什么卵用,但是頁面上使用的時(shí)候chunk.js必須在mian.js前引用

將chunk1.js,chunck2.js打包到chunk.js:

webpack.config.js

var CommonsChunkPlugin = require("webpack/lib/optimize/CommonsChunkPlugin");
module.exports = {
 entry: 
 {
  main:'./main.js',
  chunk: ["./chunk1", "./chunk2"],//插件中name,filename必須以這個(gè)key為值
 },
 output: {
  path:__dirname+'/dist',
  filename: '[name].js'//不使用[name],并且插件中沒有filename,
  這輸出文件中只用chunk.js的內(nèi)容,main.js的內(nèi)容不知跑哪里去了
 },
 plugins: [
  new CommonsChunkPlugin({
    name:"chunk",
   // filename:"chunk.js"http://忽略則以name為輸出文件的名字,否則以此為輸出文件名字
  })
 ]
};

(1)單一入口,模塊重復(fù)引用,分文件輸出(單一入口CommonsChunkPlugin能否將多次引用的模塊打包到公共模塊呢?):

webpack.config.js

var CommonsChunkPlugin = require("webpack/lib/optimize/CommonsChunkPlugin");
module.exports = {
 entry: 
 {
  main:'./main.js',
  //main1:'./main1.js',
 },
 output: {
  path:__dirname+'/dist',
  filename: '[name].js'//不使用[name],并且插件中沒有filename,
這輸出文件中只用chunk.js的內(nèi)容,main.js的內(nèi)容不知跑哪里去了
 },
 plugins: [
  new CommonsChunkPlugin({
    name:"chunk",
   // filename:"chunk.js"http://忽略則以name為輸出文件的名字,否則以此為輸出文件名字
   minChunks:2
  })
 ]
};

main.js

require("./chunk1");
require("./chunk2");

chunk1.js

require("./chunk2");
var chunk1=1;
exports.chunk1=chunk1;

chunk2模塊被引用了兩次

打包后,所有模塊還是被打包到main.js中

(3)多入口,模塊重復(fù)引用,分文件輸出(將多次引用的模塊打包到公共模塊)

webpack.config.js

var CommonsChunkPlugin = require("webpack/lib/optimize/CommonsChunkPlugin");
module.exports = {
 entry: 
 {
  main:'./main.js',
  main1:'./main1.js',
 },
 output: {
  path:__dirname+'/dist',
  filename: '[name].js'//不使用[name],并且插件中沒有filename,
  這輸出文件中只用chunk.js的內(nèi)容,main.js的內(nèi)容不知跑哪里去了
 },
 plugins: [
  new CommonsChunkPlugin({
    name:"chunk",
   // filename:"chunk.js"http://忽略則以name為輸出文件的名字,否則以此為輸出文件名字
   minChunks:2
  })
 ]
};

main.js,main1.js里都引用chunk1,chunk2.

打包后:

chunk1,chunk2被打包到chunk.js,不再像3(3)chunk1,chunk2分別被打包到mian,mian1中。

5.將公共業(yè)務(wù)模塊與類庫或框架分開打包

webpack.config.js

var CommonsChunkPlugin = require("webpack/lib/optimize/CommonsChunkPlugin");
module.exports = {
  entry: {
    main: './main.js',
    main1: './main1.js',
    common1: ['jquery'],
    common2: ['vue']
  },
  output: {
    path: __dirname + '/dist',
    filename: '[name].js'//不使用[name],并且插件中沒有filename,
    //這輸出文件中只用chunk.js的內(nèi)容,main.js的內(nèi)容不知跑哪里去了
  },
  plugins: [
    new CommonsChunkPlugin({
      name: ["chunk","common1","common2"],//頁面上使用的時(shí)候common2
      //必須最先加載
      // filename:"chunk.js"http://忽略則以name為輸出文件的名字,
        //否則以此為輸出文件名字
      minChunks: 2
    })
  ]
};

jquery被打包到common1.js,vue被打包到common2.js,chunk.js打包的是公共的業(yè)務(wù)模塊(webpack用插件CommonsChunkPlugin進(jìn)行打包的時(shí)候,將符合引用次數(shù)(minChunks)的模塊打包到name參數(shù)的數(shù)組的第一個(gè)塊里(chunk),然后數(shù)組后面的塊依次打包(查找entry里的key,沒有找到相關(guān)的key就生成一個(gè)空的塊),最后一個(gè)塊包含webpack生成的在瀏覽器上使用各個(gè)塊的加載代碼,所以頁面上使用的時(shí)候最后一個(gè)塊必須最先加載)

將webpack.config.js改為

var CommonsChunkPlugin = require("webpack/lib/optimize/CommonsChunkPlugin");
module.exports = {
  entry: {

    main: './main.js',
    main1: './main1.js',
    jquery:["jquery"],
    vue:["vue"]
  },
  output: {
    path: __dirname + '/dist',
    filename: '[name].js'
  },
  plugins: [
    new CommonsChunkPlugin({
      name: ["common","jquery","vue","load"],

      minChunks:2

    })
  ]
};

main.js

require("./chunk1");
require("./chunk2");
var jq=require("jquery");
console.log(jq);

main1.js

require("./chunk1");
require("./chunk2");
var vue=require("vue");
console.log(vue);
exports.vue=vue;

打包后

common.js

webpackJsonp([4,5],[
/* 0 */,
/* 1 */,
/* 2 */
/***/ function(module, exports, __webpack_require__) {

  __webpack_require__(3);
  var chunk1=1;
  exports.chunk1=chunk1;

/***/ },
/* 3 */
/***/ function(module, exports) {

  var chunk2=1;
  exports.chunk2=chunk2;

/***/ }
]);

相當(dāng)于公共的業(yè)務(wù)代碼都打包到了common.js里

load.js

/******/ (function(modules) { // webpackBootstrap
/******/   // install a JSONP callback for chunk loading
/******/   var parentJsonpFunction = window["webpackJsonp"];
/******/   window["webpackJsonp"] = function webpackJsonpCallback(chunkIds, moreModules) {
/******/     // add "moreModules" to the modules object,
/******/     // then flag all "chunkIds" as loaded and fire callback
/******/     var moduleId, chunkId, i = 0, callbacks = [];
/******/     for(;i < chunkIds.length; i++) {
/******/       chunkId = chunkIds[i];
/******/       if(installedChunks[chunkId])
/******/         callbacks.push.apply(callbacks, installedChunks[chunkId]);
/******/       installedChunks[chunkId] = 0;
/******/     }
/******/     for(moduleId in moreModules) {
/******/       modules[moduleId] = moreModules[moduleId];
/******/     }
/******/     if(parentJsonpFunction) parentJsonpFunction(chunkIds, moreModules);
/******/     while(callbacks.length)
/******/       callbacks.shift().call(null, __webpack_require__);
/******/     if(moreModules[0]) {
/******/       installedModules[0] = 0;
/******/       return __webpack_require__(0);
/******/     }
/******/   };

/******/   // The module cache
/******/   var installedModules = {};

/******/   // object to store loaded and loading chunks
/******/   // "0" means "already loaded"
/******/   // Array means "loading", array contains callbacks
/******/   var installedChunks = {
/******/     5:0
/******/   };

/******/   // The require function
/******/   function __webpack_require__(moduleId) {

/******/     // Check if module is in cache
/******/     if(installedModules[moduleId])
/******/       return installedModules[moduleId].exports;

/******/     // Create a new module (and put it into the cache)
/******/     var module = installedModules[moduleId] = {
/******/       exports: {},
/******/       id: moduleId,
/******/       loaded: false
/******/     };

/******/     // Execute the module function
/******/     modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);

/******/     // Flag the module as loaded
/******/     module.loaded = true;

/******/     // Return the exports of the module
/******/     return module.exports;
/******/   }

/******/   // This file contains only the entry chunk.
/******/   // The chunk loading function for additional chunks
/******/   __webpack_require__.e = function requireEnsure(chunkId, callback) {
/******/     // "0" is the signal for "already loaded"
/******/     if(installedChunks[chunkId] === 0)
/******/       return callback.call(null, __webpack_require__);

/******/     // an array means "currently loading".
/******/     if(installedChunks[chunkId] !== undefined) {
/******/       installedChunks[chunkId].push(callback);
/******/     } else {
/******/       // start chunk loading
/******/       installedChunks[chunkId] = [callback];
/******/       var head = document.getElementsByTagName('head')[0];
/******/       var script = document.createElement('script');
/******/       script.type = 'text/javascript';
/******/       script.charset = 'utf-8';
/******/       script.async = true;

/******/       script.src = __webpack_require__.p + "" + chunkId + "." + ({"0":"jquery","1":"main","2":"main1","3":"vue","4":"common"}[chunkId]||chunkId) + ".js";
/******/       head.appendChild(script);
/******/     }
/******/   };

/******/   // expose the modules object (__webpack_modules__)
/******/   __webpack_require__.m = modules;

/******/   // expose the module cache
/******/   __webpack_require__.c = installedModules;

/******/   // __webpack_public_path__
/******/   __webpack_require__.p = "";
/******/ })
/************************************************************************/
/******/ ([]);

使用的時(shí)候必須最先加載load.js

6.參數(shù)minChunks: Infinity

看一下下面的配置會是什么結(jié)果

var CommonsChunkPlugin = require("webpack/lib/optimize/CommonsChunkPlugin");
module.exports = {
  entry: {

    main: './main.js',
    main1: './main1.js',
    jquery:["jquery"]
  },
  output: {
    path: __dirname + '/dist',
    filename: '[name].js'
  },
  plugins: [
    new CommonsChunkPlugin({
      name: "jquery",

      minChunks:2

    })
  ]
};

main.js,main1.js共同引用的chunk1和chunk2會被打包到j(luò)query.js里

minChunks:2修改為minChunks:Infinity后,chunk1和chunk2都打包到main.js,main1.js里

7.參數(shù)chunks

webpack.config.js

var CommonsChunkPlugin = require("webpack/lib/optimize/CommonsChunkPlugin");
module.exports = {
  entry: {

    main: './main.js',
    main1: './main1.js',
    jquery:["jquery"]
  },
  output: {
    path: __dirname + '/dist',
    filename: '[name].js'
  },
  plugins: [
    new CommonsChunkPlugin({
      name: "jquery",

      minChunks:2,

      chunks:["main","main1"]

    })
  ]
};

只有在main.js和main1.js中都引用的模塊才會被打包的到公共模塊(這里即jquery.js)

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • JavaScript下通過的XMLHttpRequest發(fā)送請求的代碼

    JavaScript下通過的XMLHttpRequest發(fā)送請求的代碼

    JavaScript下通過的XMLHttpRequest發(fā)送請求的代碼,需要的朋友可以參考下。
    2011-06-06
  • NestJs使用Mongoose對MongoDB操作的方法

    NestJs使用Mongoose對MongoDB操作的方法

    這篇文章主要介紹了NestJs使用Mongoose對MongoDB操作的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • JavaScript通過字典進(jìn)行字符串翻譯轉(zhuǎn)換的方法

    JavaScript通過字典進(jìn)行字符串翻譯轉(zhuǎn)換的方法

    這篇文章主要介紹了JavaScript通過字典進(jìn)行字符串翻譯轉(zhuǎn)換的方法,涉及javascript字符串轉(zhuǎn)換的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-03-03
  • JavaScript中的Array對象使用說明

    JavaScript中的Array對象使用說明

    JavaScript中的Array對象是一個(gè)動(dòng)態(tài)的數(shù)組,也是一個(gè)Stack,還是一個(gè)Dictionary
    2011-01-01
  • 關(guān)于js陀螺儀的理解分析

    關(guān)于js陀螺儀的理解分析

    這篇文章主要給大家介紹了關(guān)于js陀螺儀的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用js具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • js獲取url參數(shù)值的幾種方式詳解

    js獲取url參數(shù)值的幾種方式詳解

    這篇文章為大家主要介紹了js獲取url參數(shù)值的幾種方式詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪<BR>
    2023-07-07
  • JavaScript輸出所選擇起始與結(jié)束日期的方法

    JavaScript輸出所選擇起始與結(jié)束日期的方法

    這篇文章主要介紹了JavaScript輸出所選擇起始與結(jié)束日期的方法,涉及javascript結(jié)合HTML5元素操作日期運(yùn)算的相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2017-07-07
  • canvas繪圖不清晰的解決方案

    canvas繪圖不清晰的解決方案

    本文主要介紹了canvas繪圖不清晰的解決方案,具有很好的參考價(jià)值,下面跟著小編一起來看下吧
    2017-02-02
  • es6中some和every方法使用簡單示例

    es6中some和every方法使用簡單示例

    JavaScript在ES6版本后提供了一些更加便捷的方法供開發(fā)者使用,實(shí)現(xiàn)原理其實(shí)是在對應(yīng)的構(gòu)造函數(shù)原型提供方法,下面這篇文章主要給大家介紹了關(guān)于es6中some和every方法使用的相關(guān)資料,需要的朋友可以參考下
    2023-04-04
  • JavaScript通過使用onerror設(shè)置默認(rèn)圖像顯示代替alt

    JavaScript通過使用onerror設(shè)置默認(rèn)圖像顯示代替alt

    這篇文章主要介紹了JavaScript通過使用onerror設(shè)置默認(rèn)圖像顯示代替alt的相關(guān)資料,需要的朋友可以參考下
    2016-03-03

最新評論

卢湾区| 封丘县| 罗山县| 东乡族自治县| 福州市| 山西省| 宣恩县| 阜康市| 莆田市| 荥经县| 浙江省| 潢川县| 玛曲县| 高尔夫| 林口县| 郧西县| 巴南区| 台南市| 宜春市| 宣汉县| 绿春县| 汉阴县| 托里县| 英吉沙县| 威海市| 驻马店市| 永善县| 独山县| 保山市| 井研县| 高陵县| 修文县| 望城县| 巢湖市| 东港市| 东海县| 宁城县| 都安| 盈江县| 丹凤县| 都江堰市|