NodeJS 为什么是'type:在package.json文件中的“模块”?

7lrncoxx  于 2023-06-05  发布在  Node.js
关注(0)|答案(4)|浏览(281)

我升级了节点并构建了现有文件。
但它没有建成,而且出现了一个错误。

Error [ERR_REQUIRE_ESM]: Must use import to load ES Module:                          │
   │   ~~/nuxt.config.js                                      │
   │   require() of ES modules is not supported.                                            │
   │   require() of ~~/nuxt.config.js from                    │
   │   ~~/config.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 nuxt.config.js to end in .cjs, change the requiring code to use       │
   │   import(), or remove "type": "module" from                                            │
   │   ~~/package.json.

所以我删除了'类型:module'中。
可以把它取下来吗?

eoigrqb6

eoigrqb61#

如果package.json文件中包含"type": "module",则源代码应使用import语法。当你没有的时候,你应该使用require语法;也就是说,将"type": "module"添加到package.json可以启用ES 6模块。更多信息,请看这里。

nbnkbykc

nbnkbykc2#

2022年中期更新

如果你使用的是Node.js v16,如果可以的话,因为它是LTS,你只需要使用type: module,如下所述:https://blog.logrocket.com/es-modules-in-node-today/
如果你因为某些原因仍然坚持使用较低版本的Node.js,你可以关注Flavio的这篇博客文章:https://flaviocopes.com/how-to-enable-es-modules-nodejs/
并执行以下操作:

  • 在您的package.json中添加"type": "module"
  • 在启动应用程序时使用--experimental-modules,例如:node --experimental-modules app.js

或者,如果你已经在现代版本的Node上,你可以做其中一个:

  • 在您的package.json中添加"type": "module"
  • 使用.mjs扩展名重命名文件,最终结果如下所示:node app.mjs
ndasle7k

ndasle7k3#

@AfsharMohebi的回答非常好,涵盖了最有用的要点。
这个答案是在CI/CD管道周围添加一些颜色,其中可能需要使用添加动态type参数来执行用ES6 JavaScript编写的node代码。此外,我知道这与OP的问题无关,但谷歌把我带到了这里,所以希望这对其他人有用。
特别地,如果我们没有包含type: module * 的package.json,我们可以根据节点docs* 使用--input-type=module
例如,我使用下面的命令来测试一个npm包是否上传成功并且可用:

mkdir test-mypkg && cd test-mypkg 
echo "import { myFunc } from '@myname/myPkg';" > test.js 
npm i @myname/myPkg @babel/core @babel/node && cat test.js | node --input-type=module
  • 注意:babel依赖关系包含在完整的ES6到ES 5转换中,可能是必要的,也可能不是必要的。此外,您可能应该固定您正在测试的软件包myPkg的版本!*
t30tvxxf

t30tvxxf4#

增加**“type”:package.json中的“module”**键,用于在nodejs中使用es6模块

相关问题