Javascript 在Node.js上使用dynamic import()函数
我正在尝试在节点v10环境中实现的基本功能 main.jsJavascript 在Node.js上使用dynamic import()函数,javascript,node.js,babeljs,es6-modules,dynamic-import,Javascript,Node.js,Babeljs,Es6 Modules,Dynamic Import,我正在尝试在节点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();
async function main() {
try {
const moduleA = await import('./moduleA');
console.log('Inside main function...');
moduleA();
console.log(moduleA);
}
catch(err) {
console.log(err);
}
}
main();
console.log('Inside global scope module A...');
function moduleA() {
console.log('Running module A function...');
}
export default moduleA;
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();
moduleA.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();
console.log('Inside global scope module A...');
function moduleA() {
console.log('Running module A function...');
}
export default moduleA;
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 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)
import moduleA from './moduleA';
async function main() {
try {
console.log('Inside main function...');
moduleA();
console.log(moduleA);
}
catch(err) {
console.log(err);
}
}
main();
我也试过这个(下面的代码)。结果是一样的:
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();
console.log('Inside global scope module A...');
function moduleA() {
console.log('Running module A function...');
}
export default moduleA;
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节点src/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)
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(额外信息)
加载模块并返回包含其所有导出的模块对象。要访问默认导出,请使用模块对象的default
属性:
const moduleA = await import('./moduleA');
moduleA.default();
// OR
const { default: moduleA } = await import('./moduleA');
moduleA();
就这样!非常感谢。这是一个在大多数帖子中都没有提到的非常重要的细节。谢谢:)救生员?没有,但是非常接近