【node:19212】 解决 Node.js 报错 “将文件视为 CommonJS 模块“

【node:19212】 解决 Node.js 报错 "将文件视为 CommonJS 模块"

当在 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 模块。下面是解决这个问题的几种方法。

方式一

1. 设置 "type": "module":

在项目的 package.json 文件中添加 "type": "module" 字段,告诉 Node.js 该项目使用 ES 模块。

json 复制代码
{
  "type": "module",
  ...
}

这样做后,Node.js 将会将所有 .js 文件视为 ES 模块。

2. 使用 .mjs 扩展名:

将文件的扩展名从 .js 改为 .mjs,这样 Node.js 将会将文件视为 ES 模块。

bash 复制代码
mv ./src/test/test.js ./src/test/test.mjs

这样做后,Node.js 将会自动将文件视为 ES 模块。

3. 使用 --experimental-modules 标志:

在运行 Node.js 时,使用 --experimental-modules 标志启用 ES 模块支持。

bash 复制代码
node --experimental-modules ./src/test/test.js

这样做后,Node.js 将会将文件视为 ES 模块。

方式二

1. 在顶部添加 require 语句:

在文件顶部添加一个 require 语句,将 import 语句转换为 CommonJS 的 require 语法。

javascript 复制代码
const handleHashChange = require("./test-module/test1").default;

这样做后,Node.js 将会将文件视为 CommonJS 模块。

2. 使用 Babel 转换:

使用 Babel 将 ES 模块转换为 CommonJS 模块,然后在 Node.js 中运行。

  1. 安装 Babel 相关的依赖:
bash 复制代码
npm install @babel/core @babel/cli @babel/preset-env --save-dev
  1. 创建 .babelrc 文件来配置 Babel:
json 复制代码
{
  "presets": ["@babel/preset-env"]
}
  1. 使用 Babel 转换代码:
bash 复制代码
npx babel ./src/test/test.js --out-file ./dist/test.js
  1. 在 Node.js 中运行转换后的代码:
bash 复制代码
node ./dist/test.js

以上是两种常见的解决方案,你可以根据自己的需求选择其中一种。每种方法都有其优缺点,你可以根据项目的具体情况选择最适合的方法。

相关推荐
学习3人组4 分钟前
windows系统下nvm的安装
node.js·nvm
sunwenjian88640 分钟前
node.js下载、安装、设置国内镜像源(永久)(Windows11)
node.js
#做一个清醒的人1 小时前
Electron 保活方案:用子进程彻底解决原生插件崩溃问题
前端·electron·node.js
云天0011 小时前
前端私活神器,nodejs+vue3+typescript全栈框架,
前端·后端·node.js
吴声子夜歌1 小时前
Node.js——WebSocket
websocket·网络协议·node.js
大阿明2 小时前
Node.js npm 安装过程中 EBUSY 错误的分析与解决方案
前端·npm·node.js
hsjcjh12 小时前
Nodemailer使用教程:在Node.js中发送电子邮件
linux·运维·node.js
吴声子夜歌14 小时前
Node.js——异步编程与回调
node.js
Maschera9617 小时前
openclaw-lark 的 Bot@Bot 跨Bot提及功能 - 开发经验分享
人工智能·node.js
云道轩19 小时前
node.js 24.x一键安装脚本
node.js