javascript - 如何在 Node JS 中正确使用 import

标签 javascript node.js ecmascript-6 import

我在 package.json 中添加了 "type": "module"。我的印象是 ES6 和 CommonJS 之间的转换不需要使用 import 的较新版本的 Node ,在本例中为 v16.0.0。

我需要更改什么才能使导入工作?


我在同一目录中有 3 个简单文件。

  1. package.json
  2. main.js
  3. Utility.js

包.json

{
  "name": "node_template",
  "version": "1.0.0",
  "description": "",
  "main": "main.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC",
  "type": "module"
}

实用程序.js

'use strict';

class Utility {
   constructor() {
   }
}

export { Utility };

主要.js

"use strict";

(async ()=>{
    import { Utility } from './Utility.js';
    var utility = new Utility();
    console.log( "Main" );
})();

当我运行“node main.js”时,出现以下错误:

node -v
v16.0.0

node main.js

main.js:4
    import { Utility } from './Utility.js';
           ^
SyntaxError: Unexpected token '{'
←[90m    at Loader.moduleStrategy (node:internal/modules/esm/translators:147:18)
←[39m
←[90m    at async link (node:internal/modules/esm/module_job:64:21)←[39m

最佳答案

主要.js

(async () => { 
let { Utility } = await import('./Utility.js');
let utility = new Utility();
console.log('main');
})();

注意: 您使用的 import 语句只能在模块的顶层使用。但是您可以使用动态导入 - import() 动态或有条件地导入模块。有关详细信息,请参阅下面的链接。

链接:

https://v8.dev/features/dynamic-import

https://flaviocopes.com/javascript-dynamic-imports/

关于javascript - 如何在 Node JS 中正确使用 import,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67348239/

相关文章:

javascript - 与 webpack 捆绑后,纠正 Javascript 错误,因为元素不存在于当前页面中

javascript - Moves App API 调用在浏览器中有效,但在程序中失败(帖子中包含 URL)

javascript - 在模板内渲染剑道网格导致错误

javascript - GAS 按日期对多维数组排序

javascript - composeWith 子生成器没有按预期进行模拟?

javascript - 编写具有多个参数的 javascript 函数

javascript - 定位 event.currentTarget 的 child

javascript - 如何允许 Node pg 模块与我的 Windows postgresql 服务器通信?

node.js - socket.on ('connection' ... 事件从未触发 nodejs + express + socket.io

unit-testing - 模拟使用箭头函数作为参数调用的方法