[英]How to keep all functions after webpack build?
Webpack 檢查函數的使用並刪除(作為死代碼)“未使用”的函數。 但是如果我在 HTML 中使用 function,如果沒有腳本調用它,相同的 function 將被刪除。
例如,我有 script.js:
function doSomething() {
console.log("clicked button");
}
function explicitUsedFunction() {
console.log("Hey, function called!");
}
explicitUsedFunction();
和 index.html:
<html>
<head>
<title>Test</title>
<script src="script.js"></script>
</head>
<body>
<button onclick="doSomething()">Button</button>
</body>
</html>
doSomething function 被 onclick 按鈕事件使用。
這是我的 webpack.config.js:
const path = require('path');
const TerserMinimizer = require('terser-webpack-plugin');
module.exports = {
mode: 'production',
entry: ["./script.js"],
output: {
path: path.resolve(__dirname, 'dist'),
filename: 'bundle.js'
},
optimization: {
minimize: true,
minimizer: [
new TerserMinimizer({
terserOptions: {
keep_classnames: true,
keep_fnames: true
}
})
]
}
};
我正在使用 TerserPlugin 來保留 function 名稱(因為 HTML 不會被修改)。 因此,bundle.js 文件將是:
!function explicitUsedFunction(){console.log("Hey, function called!")}();
doSomething function 已被刪除,問題是,如何使用 Webpack 將所有聲明的函數保留在 bundle.js 中?
需要了解有關答案的一些要點:
經過與 webpack 的多次斗爭,我找到了一個簡單的解決方案。 我需要兩件事:將所有 function 發送到縮小文件並使事件函數在窗口的 scope 上可用。A 剛剛為我需要的每個 function 添加了以下行:
function doSomething() {
console.log("clicked button");
}
function explicitUsedFunction() {
console.log("Hey, function called!");
}
explicitUsedFunction();
/*NEW LINE HERE:*/
window.doSomething = doSomething;
通過這個簡單的更改,我告訴 webpack 使用了 function,我不再需要 Terser (webpack.config.js):
const path = require('path');
module.exports = {
mode: 'production',
entry: ["./script.js"],
output: {
path: path.resolve(__dirname, 'dist'),
filename: 'bundle.js'
}
};
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.