即使设置了--experimental-modules,节点也不支持导入/导出

时间:2019-07-27 16:13:21

标签: javascript node.js

我试图让Node处理导入/导出,但是在"import $" -> Unexpected identifier的import语句中出现语法错误

节点

node start.js --experimental-modules

start.js

(() => {
    import $ from "SCRIPT//CommonImport";
});

commonImport.js

(() => {
    export var $ = require("jquery");
});

package.json

{
  "type": "module",
  "name": "lc.assets.hyper",
  "version": "1.0.0",
  "description": "brand new UI for LC Assets",
  "main": "start.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "Stein Lundbeck",
  "license": "ISC",
  "devDependencies": {
    "jquery": "^3.4.1"
  }
}

2 个答案:

答案 0 :(得分:4)

您必须像这样在文件顶部声明所有import

import $ from "/my/path"

并且您不能在函数内部使用export语句,必须在模块的上部范围中声明它们。如果使用ES6导入/导出,则不能使用require(CommonJS),但是可以使用export ... from ...构造:

export {default as $} from "jquery"

如果要动态导入模块,则必须这样做:

async function myFunc() {
  const exportedVar = await import('/my/path')
}

请注意,import()返回一个Promise,即它是异步操作,而不是与require同步。

还请注意,您不能像export那样动态使用import()

答案 1 :(得分:0)

使用esm模块可以解决问题。

安装

npm install esm --save-dev

使用

node -r esm start.js