语法错误:不能在node.js上的模块外部使用import语句

yhxst69z  于 2022-11-29  发布在  Node.js
关注(0)|答案(2)|浏览(694)

我尝试将一个模块添加到我的项目中,在我的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.
wfypjpf4

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)

uqdfh47h

uqdfh47h2#

我是该库的开发者。对于给您带来的不便,我深表歉意。您遇到这个问题是因为该库是使用ESModule语法开发和打包的。(即,您必须使用import导入模块)。但是,由于您试图在CommonJS语法项目中使用该库,因此它无法工作。Evgheni Calcutin提供的答案和解决方案是正确的。
为了解决这个问题,我重新修改了这个库,使它支持ESModule和CommonJS语法。这个库被重命名了,使名字更容易发音。所以新的库是berkelium。所有文档都提供了。
谢谢你!

相关问题