节点版本:
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"
答案 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"
},
}