gpt4 book ai didi

javascript - 我想动态加载到入口点的 Webpack 捆绑模块

转载 作者:行者123 更新时间:2023-12-03 07:09:51 25 4
gpt4 key购买 nike

下面的代码似乎使用了 dynamic import :

(function executeApplication(): void {

const loadDataButton: HTMLElement | null = document.getElementById("LoadDataButton");
if (loadDataButton !== null) {
loadDataButton.addEventListener("click", (): void => {
(async function handler(): Promise<void> {
console.log("Checkpoint 1");
const loadedValue: string = await loadDataOnDemand();
console.log(loadedValue);
})().catch((): void => { /* */ });
});
}
})();


async function loadDataOnDemand(): Promise<string> {

console.log("Checkpoint 2");
const MODULE: { default: string; DYNAMICALLY_LOADED_CONST_FROM_TS_MODULE: string; } =
await import("./DynamicLoadingTesting/TypeScriptModuleForDynamicLoading");
console.log("Checkpoint 3");
console.log(MODULE);


return MODULE.DYNAMICALLY_LOADED_CONST_FROM_TS_MODULE;
}

但是实际上 TypeScriptModuleForDynamicLoading.ts 已经被捆绑到入口点:

FrontendLogicPreProcessingTesting:
asset FrontendLogicPreProcessingTesting.js 11.2 KiB [emitted] (name: FrontendLogicPreProcessingTesting)
./FrontendLogicPreProcessingTesting.ts 2.28 KiB [built] [code generated]
./DynamicLoadingTesting/TypeScriptModuleForDynamicLoading.ts 419 bytes [built] [code generated]
FrontendLogicPreProcessingTesting (webpack 5.4.0) compiled successfully in 710 ms

enter image description here

没有 webpack 错误,在浏览器中的输出似乎是正确的:

enter image description here

我的 Webpack 配置:

{
name: 'FrontendLogicPreProcessingTesting',
context: 'D:\\IntelliJ IDEA\\XXXXX\\ProjectBuildingCommonTest\\00-Source\\FrontendLogicPreProcessingTesting'
,
target: 'web',
entry: {
FrontendLogicPreProcessingTesting: 'D:/IntelliJ IDEA/XXXXX/ProjectBuildingCommonTest/00-Source/FrontendLogic
PreProcessingTesting/FrontendLogicPreProcessingTesting.ts'
},
output: {
path: 'D:\\IntelliJ IDEA\\XXXXX\\ProjectBuildingCommonTest\\01-DevelopmentBuild\\FrontendLogicPreProcessin
gTesting',
publicPath: './',
filename: '[name].js',
chunkFilename: 'loading_on_demand/partial__[id].js'
},
mode: 'development',
watch: true,
devtool: 'eval-cheap-source-map',
module: {
rules: [
[Object], [Object],
[Object], [Object],
[Object], [Object],
[Object], [Object],
[Object]
]
},
resolve: {
extensions: [ '.mjs', '.js', '.ts' ],
alias: { vue: 'vue/dist/vue.common.js' }
},
plugins: [
DefinePlugin { definitions: [Object] },
ForkTsCheckerWebpackPlugin { options: [Object] },
],
optimization: { minimize: false, emitOnErrors: true }
}

我使用的是 webpack 5.x.x.,但在使用 4.x.x 时遇到了同样的问题。

我的 TypeScript 配置:

{
"compilerOptions": {

"target": "es2017",
"strict": true,

"module": "CommonJS",
"moduleResolution": "node",
"esModuleInterop": true,
"allowSyntheticDefaultImports": true,
"allowJs": false,

"experimentalDecorators": true,

"baseUrl": "./",
"paths": {

},

"noUnusedParameters": true,
"noImplicitReturns": true
}
}

动态加载还没有满足哪些条件?

最佳答案

您当前正在 tsconfig.json 中使用 module: "CommonJS",这将导致所有动态 import() 被转换为require() 在 Webpack 真正看到它们之前调用。为了让 Webpack 能够生成新的 block ,Webpack 必须看到动态的 import() 调用。

设置 module: "esnext" 将使动态 import() 不会转换为 require(),因此 Webpack可以妥善处理它们。

关于javascript - 我想动态加载到入口点的 Webpack 捆绑模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64890696/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com