javascript - 为什么 node.js 会忽略 package.json 文件中的“类型”设置?
问题描述
节点版本:
节点-v
v12.13.0
Node.js 将视为
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
or启动我的代码,node ./src/index.js
但我得到了错误:
从“ramda”导入 R;
^^^^^^SyntaxError: 不能在模块外使用 import 语句
为什么会这样?即为什么节点忽略我的"type": "module"
设置?
同时它工作正常:
node --experimental-modules .\src\index.js
解决方案
在 Node 12 中,您需要运行带有--experimental-modules
标志的 node 以启用对 ECMAScript 模块的支持。
import
是 ES6 的一部分,默认情况下 NodeJS 还不支持它。它可以通过将 import 替换为require
. 或者你可以在这里.babelrec
回答。
同样对于 ES 模块的使用,“main”的值必须是包含扩展名的完整路径:“./src/index.js”,而不是“index.js”。
{
"type": "module",
"main": "./src/index.js"
"scripts": {
"start": "node --experimental-modules ./src/index.js"
},
}