【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

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

相关推荐
傻小胖6 小时前
在 Node.js 中使用原生 `http` 模块,获取请求的各个部分:**请求行、请求头、请求体、请求路径、查询字符串** 等内容
网络协议·http·node.js
傻小胖7 小时前
npm的基本使用安装所有包,安装删除指定版本的包,配置命名别名
前端·npm·node.js
傻小胖7 小时前
nodejs使用require导入npm包,开发依赖和生产依赖 ,全局安装
前端·npm·node.js
傻小胖7 小时前
yarn的介绍与操作,yarn和npm的选择
前端·npm·node.js
海上彼尚11 小时前
Node.js 操作 ElasticSearch 完整指南:从安装到实战
大数据·elasticsearch·node.js
我怎么能这么帅气12 小时前
Node.js子进程:exec与spawn的生死局!大数据场景为何总崩溃?
大数据·node.js
牛马喜喜12 小时前
sequelize进阶技巧2(多对多下的查询、视图、 方法劫持)
后端·node.js
技术猿1887027835112 小时前
Node.js 异步调用淘宝API实战:构建高吞吐商品详情数据采集方案
node.js
wangyongquan1 天前
koa语法 | koa/router | 中间件 | 洋葱模型
后端·node.js
日日行不惧千万里1 天前
Node.js和js到底什么关系
开发语言·javascript·node.js