[英]Using the dynamic import() function on Node.js
我正在嘗試在 Node v10 環境中實現動態導入的基本功能。
main.js
async function main() {
try {
const moduleA = await import('./moduleA');
console.log('Inside main function...');
moduleA();
console.log(moduleA);
}
catch(err) {
console.log(err);
}
}
main();
模塊A.js
console.log('Inside global scope module A...');
function moduleA() {
console.log('Running module A function...');
}
export default moduleA;
這是我運行npx babel-node main.js
時得到的結果
PS C:\myProject\test-module-imports> npx babel-node src/main.js
Inside global scope module A...
Inside main function...
TypeError: moduleA is not a function
at main (C:\myProject\test-module-imports\src/main.js:9:5)
at process._tickCallback (internal/process/next_tick.js:68:7)
at Function.Module.runMain (internal/modules/cjs/loader.js:834:11)
at Object.<anonymous> (C:\myProject\test-module-imports\node_modules\@babel\node\lib\_babel-node.js:174:21)
at Module._compile (internal/modules/cjs/loader.js:778:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:789:10)
at Module.load (internal/modules/cjs/loader.js:653:32)
at tryModuleLoad (internal/modules/cjs/loader.js:593:12)
at Function.Module._load (internal/modules/cjs/loader.js:585:3)
at Function.Module.runMain (internal/modules/cjs/loader.js:831:12)
.babelrc
{
"presets": [
[
"@babel/preset-env", {
"targets": {
"node": "10"
}
}
]
]
}
我也試過這個(下面的代碼)。 結果是一樣的:
main.js
let moduleA = null;
import('./moduleA').then((importedModule) => {
moduleA = importedModule;
main();
});
async function main() {
try {
// const moduleA = await import('./moduleA');
console.log('Inside main function...');
moduleA();
console.log(moduleA);
}
catch(err) {
console.log(err);
}
}
// main();
問題
我究竟做錯了什么?
這工作正常(常規導入):也使用npx babel-node src/main.js
import moduleA from './moduleA';
async function main() {
try {
console.log('Inside main function...');
moduleA();
console.log(moduleA);
}
catch(err) {
console.log(err);
}
}
main();
package.json (額外信息)
{
"name": "test-module-imports",
"version": "1.0.0",
"description": "",
"main": "main.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC",
"devDependencies": {
"@babel/cli": "^7.7.0",
"@babel/core": "^7.7.2",
"@babel/node": "^7.7.0",
"@babel/preset-env": "^7.7.1"
}
}
動態 import()加載模塊並返回包含其所有導出的模塊 object。 為了訪問默認導出,請使用模塊 object 的default
屬性:
const moduleA = await import('./moduleA');
moduleA.default();
// OR
const { default: moduleA } = await import('./moduleA');
moduleA();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.