【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

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

相关推荐
伍哥的传说1 小时前
H3初识——入门介绍之常用中间件
前端·javascript·react.js·中间件·前端框架·node.js·ecmascript
超级土豆粉2 小时前
npm 包 scheduler 介绍
前端·npm·node.js
WildBlue3 小时前
流式输出:前端工程师的魔术表演,小白也能看懂!🎩✨
前端·javascript·node.js
GDAL5 小时前
Node.js Stream 深入全面讲解
node.js
爱分享的程序员19 小时前
前端面试专栏-算法篇:20. 贪心算法与动态规划入门
前端·javascript·node.js
我叫黑大帅1 天前
Sequelize:让你和数据库唠嗑像聊微信一样简单 😎
后端·node.js
小山不高1 天前
本地使用minio之前后端关键点
前端·node.js
吓死羊了1 天前
设置nginx和tomcat开机自动启动
后端·node.js·tomcat
归于尽1 天前
浏览器和 Node.js 的 EventLoop,原来差别这么大
前端·node.js·浏览器
前端双越老师1 天前
30 行代码 langChain.js 开发你的第一个 Agent
人工智能·node.js·agent