我尝试将一个模块添加到我的项目中,在我的node.js
项目的index.js
中添加了下面这行文档
import { bkLabs } from '@berkelium/nlp-core';
但我得到以下错误
SyntaxError: Cannot use import statement outside a module
at wrapSafe (internal/modules/cjs/loader.js:1001:16)
at Module._compile (internal/modules/cjs/loader.js:1049:27)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1114:10)
at Module.load (internal/modules/cjs/loader.js:950:32)
at Function.Module._load (internal/modules/cjs/loader.js:790:12)
at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:75:12)
at internal/main/run_main_module.js:17:47
然后我寻找一个解决方案,我发现我必须改变一个要求的导入
const bkLabs = require('@berkelium/nlp-core');
但是我得到了这个错误:
internal/modules/cjs/loader.js:1102
throw new ERR_REQUIRE_ESM(filename, parentPath, packageJsonPath);
^
Error [ERR_REQUIRE_ESM]: Must use import to load ES Module: /home/user/proyectos/chatBot/node_modules/@berkelium/nlp-core/src/index.js
require() of ES modules is not supported.
require() of /home/user/proyectos/chatBot/node_modules/@berkelium/nlp-core/src/index.js from /home/user/proyectos/chatBot/index.js is an ES module file as it is a .js file whose nearest parent package.json contains "type": "module" which defines all .js files in that package scope as ES modules.
Instead rename /home/user/proyectos/chatBot/node_modules/@berkelium/nlp-core/src/index.js to end in .cjs, change the requiring code to use import(), or remove "type": "module" from /home/user/proyectos/chatBot/node_modules/@berkelium/nlp-core/package.json.
2条答案
按热度按时间wfypjpf41#
看起来您尝试使用的库是用ESModule语法编写的,而您的NodeJS代码是用CommonJS编写的。
您不能要求()ESM脚本;您只能导入ESM脚本,如下所示:从“foo”导入{foo}。
这是混合CommonJS和ESModules的问题。默认情况下,nodejs使用CommonJS模块语法,除非您在
package.json
中指定"type": "module"
或使用.mjs
扩展。解决方案,请选择最适合您的解决方案:
1.以ESModule语法编写NodeJS
1.将特性PR提交到
@berkelium/nlp-core
以支持混合模块语法(请在此处查看更多信息:https://nodejs.org/api/packages.html#dual-commonjses-module-packages)uqdfh47h2#
我是该库的开发者。对于给您带来的不便,我深表歉意。您遇到这个问题是因为该库是使用ESModule语法开发和打包的。(即,您必须使用
import
导入模块)。但是,由于您试图在CommonJS语法项目中使用该库,因此它无法工作。Evgheni Calcutin提供的答案和解决方案是正确的。为了解决这个问题,我重新修改了这个库,使它支持ESModule和CommonJS语法。这个库被重命名了,使名字更容易发音。所以新的库是berkelium。所有文档都提供了。
谢谢你!