nodejs require/import导包报错以及解决方法
2022/9/13 1:26:14
本文主要是介绍nodejs require/import导包报错以及解决方法,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
背景
最近发现一本nodejs的小册,在学习其中的代码时,发现里面用到了chalk-animation
这个库,在install好这个库后,使用require()
导入时报错
Error [ERR_REQUIRE_ESM]: require() of ES Module E:\...\code\node_modules\chalk-animation\index.js from E:\...\code\案例一.js not supported. Instead change the require of index.js in E:\...\code\案例一.js to a dynamic import() which is available in all CommonJS modules.
由于这本小册写于多年前,现在这个库最新版已经变成了ESModule
导出了,看到报错信息,貌似已经支持了全部的CommonJS模块使用import
导入,果断改成import导入方式。这时候再来运行代码,控制台又爆出如下错误:
import chalkWorker from 'chalk-animation' ^^^^^^ SyntaxError: Cannot use import statement outside a module
这是由于没有声明包类型导致的
解决方案
打开package.json
,在其中声明包类型为module
,如下所示
{ "devDependencies": { "chalk-animation": "^2.0.3" }, "type": "module" }
type
还可以设置为commomjs
,这个是默认的(V18.4)。
意外事故
有这么两个文件
//step.js const pad = '.' exports.step = (t)=>`|${pad.repeat(t)}>>`
//race.js const { step } = require("./step.js") const steps = step(20) module.exports = { steps }
在设置为module
后,原先js文件中module.exports
的方式就不支持了。会报如下错误
const { step } = require("./step.js") ^ ReferenceError: require is not defined in ES module scope, you can use import instead This file is being treated as an ES module because it has a '.js' file extension and 'E:\...\code\package.json' contains "type": "module". To treat it as a CommonJS script, rename it to use the '.cjs' file extension.
根据报错信息提示,我们可以使用两种方法来修改代码。
- 使用
import
的方式来代替require
//导入的改变 // const { step } = require("./step.js") import { step } from "./step.js" //导出也要改变 //exports.step = (t)=>`|${pad.repeat(t)}>>` export function step(t){ return `|${pad.repeat(t)}>>`}
- 把文件拓展名改为
.cjs
,这样它会被当作commonJs来对待
这篇关于nodejs require/import导包报错以及解决方法的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-25Vue3学习:从入门到初步掌握
- 2024-12-25Vue3入门:新手必读的简单教程
- 2024-12-23【JS逆向百例】爱疯官网登录逆向分析
- 2024-12-21Vue3教程:新手入门到实践应用
- 2024-12-21VueRouter4教程:从入门到实践
- 2024-12-20Vue3项目实战:从入门到上手
- 2024-12-20Vue3项目实战:新手入门教程
- 2024-12-20VueRouter4项目实战:新手入门教程
- 2024-12-20如何实现JDBC和jsp的关系?-icode9专业技术文章分享
- 2024-12-20Vue项目中实现TagsView标签栏导航的简单教程