13-webpack tree sharking
4729 ワード
tree sharkingはwebpackの内蔵機能であるため、生産モードではデフォルトでオープンしています.ここでは検証デモのみを行います.
一、概要
1.1機能
tree sharkingは、JavaScriptコンテキストの未参照コード(dead-code)の除去を記述する用語である.これは、ES2015モジュール文法の静的構造特性、例えばimportおよびexportに依存する.
1.2意味
アプリケーションをツリーに想像する.緑の葉は、実際に使用されているソースコードとLibrary(ライブラリ)は、木の木の葉です.枯れ葉はコードを引用していないことを表しています.秋の木の枯れ葉です.死んだ木の葉を除去するためには、この木を揺すって落下させなければなりません.
二、共通モジュールの追加
srcディレクトリにcomon.jsを追加し、内容を編集します.
4.1 modeをnoneに設定する
4.1 modeをdevelopmentに設定する
4.3 modeをプロデュースに設定する
终わります
この特定の例では、多くは減少していないように見えるが、ツリーに複雑な依存性を持つ大型アプリケーションでtree shkingを実行すると、bundleに著しい体積最適化が生じる.
参照リンク tree-sharking コード例
一、概要
1.1機能
tree sharkingは、JavaScriptコンテキストの未参照コード(dead-code)の除去を記述する用語である.これは、ES2015モジュール文法の静的構造特性、例えばimportおよびexportに依存する.
1.2意味
アプリケーションをツリーに想像する.緑の葉は、実際に使用されているソースコードとLibrary(ライブラリ)は、木の木の葉です.枯れ葉はコードを引用していないことを表しています.秋の木の枯れ葉です.死んだ木の葉を除去するためには、この木を揺すって落下させなければなりません.
二、共通モジュールの追加
srcディレクトリにcomon.jsを追加し、内容を編集します.
export function funcA() {
console.log(" A");
}
export function funcB() {
console.log(" B");
}
三、index.jsを編集するimport { funcA } from './common.js';
// Hello webpack ! div
function component() {
let element = document.createElement('div');
element.innerHTML = "Hello webpack !";
// funcA
console.log("funcA",funcA());
return element;
}
// div body
document.body.appendChild(component());
四、webpack.co.nfig.jsを編集する.4.1 modeをnoneに設定する
const path = require('path');
module.exports = {
entry: './src/index.js',
mode:"none",
output: {
filename: 'main.js',
path: path.resolve(__dirname, 'dist')
}
};
コンパイルされたメーン.jsの内容"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "funcA", function() { return funcA; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "funcB", function() { return funcB; });
function funcA() {
console.log(" A");
}
function funcB() {
console.log(" B");
}
funcBは使われていませんが、コンパイルされました.4.1 modeをdevelopmentに設定する
const path = require('path');
module.exports = {
entry: './src/index.js',
mode:"development",
output: {
filename: 'main.js',
path: path.resolve(__dirname, 'dist')
}
};
コンパイルされたメーン.jsの内容は、common.jsの内容についてです./***/ "./src/common.js":
/*!***********************!*\
!*** ./src/common.js ***!
\***********************/
/*! exports provided: funcA, funcB */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"funcA\", function() { return funcA; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"funcB\", function() { return funcB; });
function funcA() {
console.log(\" A\");
}
function funcB() {
console.log(\" B\");
}
//# sourceURL=webpack:///./src/common.js?");
/***/ }),
コードフォーマット後/***/ "./src/common.js":
/*!***********************!*\
!*** ./src/common.js ***!
\***********************/
/*! exports provided: funcA, funcB */
(function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);" +
"/* harmony export (binding) */ " +
"__webpack_require__.d(" +
"__webpack_exports__, \"funcA\", function() { return funcA; });" +
"/* harmony export (binding) */" +
" __webpack_require__.d(__webpack_exports__, \"funcB\", function() { return funcB; });" +
"function funcA() {" +
"console.log(\" A\");" +
"}" +
"function funcB() {" +
"console.log(\" B\");" +
"}" +
"//# sourceURL=webpack:///./src/common.js?");
})
まだ明らかにFncBは使用されていませんが、コンパイルされています.4.3 modeをプロデュースに設定する
const path = require('path');
module.exports = {
entry: './src/index.js',
mode:"production",
output: {
filename: 'main.js',
path: path.resolve(__dirname, 'dist')
}
};
コンパイルされたメーン.jsの内容は圧縮されます.再フォーマット後、common.jsの内容について:([function (e, t, n) {
"use strict";
n.r(t), document.body.appendChild(function () {
let e = document.createElement("div");
return e.innerHTML = "Hello webpack !", console.log("funcA", void console.log(" A")), e
}())
}]);
現在はfuncAしか見られません.funcBに関する内容はありません.终わります
この特定の例では、多くは減少していないように見えるが、ツリーに複雑な依存性を持つ大型アプリケーションでtree shkingを実行すると、bundleに著しい体積最適化が生じる.
参照リンク