赞
踩
当在 Node.js 中运行 JavaScript 文件时,可能会遇到类似以下的报错信息:
(node:19212) Warning: To load an ES module, set "type": "module" in the package.json or use the .mjs extension.
D:\my_dev\frontend\svelte\demo1\svelte-demo\src\test\test.js:1
import handleHashChange from "./test-module/test1";
^^^^^^
SyntaxError: Cannot use import statement outside a module
这个报错表明 Node.js 在处理 JavaScript 文件时遇到了 import
语句,但未将文件视为 ES 模块。下面是解决这个问题的几种方法。
在项目的 package.json
文件中添加 "type": "module"
字段,告诉 Node.js 该项目使用 ES 模块。
{
"type": "module",
...
}
这样做后,Node.js 将会将所有 .js
文件视为 ES 模块。
将文件的扩展名从 .js
改为 .mjs
,这样 Node.js 将会将文件视为 ES 模块。
mv ./src/test/test.js ./src/test/test.mjs
这样做后,Node.js 将会自动将文件视为 ES 模块。
在运行 Node.js 时,使用 --experimental-modules
标志启用 ES 模块支持。
node --experimental-modules ./src/test/test.js
这样做后,Node.js 将会将文件视为 ES 模块。
在文件顶部添加一个 require
语句,将 import
语句转换为 CommonJS 的 require
语法。
const handleHashChange = require("./test-module/test1").default;
这样做后,Node.js 将会将文件视为 CommonJS 模块。
使用 Babel 将 ES 模块转换为 CommonJS 模块,然后在 Node.js 中运行。
npm install @babel/core @babel/cli @babel/preset-env --save-dev
.babelrc
文件来配置 Babel:{
"presets": ["@babel/preset-env"]
}
npx babel ./src/test/test.js --out-file ./dist/test.js
node ./dist/test.js
以上是两种常见的解决方案,你可以根据自己的需求选择其中一种。每种方法都有其优缺点,你可以根据项目的具体情况选择最适合的方法。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。