为什么node.js会忽略package.json文件中的“类型”设置?

时间:2019-11-11 17:19:26

标签: javascript node.js

节点版本:

  

node -v
  v12.13.0

我阅读了this documentation的有关在Node.js中使用ES模块的信息:

  

Node.js将所有其他形式的输入视为str2.replaceAll("[^\\w',]", "").replaceAll(",", " ") ,例如CommonJS   最近的父.js文件不包含顶级文件的文件   package.json字段

这是我的"type"文件:

package.json

这是我的{ "type": "module", "name": "sandbox", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "start": "node ./src/index.js" }, "keywords": [], "author": "", "license": "ISC", "dependencies": { "ramda": "^0.26.1" } }

./src/index.js

我尝试通过import R from "ramda"; const src = {name:"Bob",age:7}; const _src = R.clone(src); console.log(_src); npm start来启动代码,但出现错误:

  

从“ ramda”导入R;
  ^^^^^^

     

SyntaxError:无法在模块外部使用import语句

为什么会发生?即为什么节点会忽略我的node ./src/index.js设置?

同时运行正常:

"type": "module"

1 个答案:

答案 0 :(得分:1)

在节点12中,您需要运行带有--experimental-modules标志的节点以启用对ECMAScript模块的支持。

import是ES6的一部分,默认情况下NodeJS尚不支持。通过用require替换import可以正常工作。或者,您可以将.babelrec用作已回答的here

对于ES模块的使用,“ main”的值必须是完整路径,包括扩展名:“ ./ src / index.js”,而不是“ index.js”。

{
  "type": "module",
  "main": "./src/index.js"
  "scripts": {
    "start": "node --experimental-modules ./src/index.js"  
  },
}