如何在ES6模块node app中加入commonjs模块?

问题描述 投票:1回答:1

我有一个node app,我想用标准的ES6模块格式(即 "type": "module" 中的 package.json,并使用 importexport 而不需要移植到ES5中。但是,我想利用一些旧的库,如使用CommonJS的Express和socket.io。 require 格式。我有哪些选择(截至52020,Node 12.16.3),可以将CommonJS模块组合到ES6应用中?

javascript node.js ecmascript-6 es6-modules commonjs
1个回答
3
投票

使用CommonJS模块是非常直接的。default 从CommonJS模块导出。

import packageMain from 'commonjs-package'; // Works
import { method } from 'commonjs-package'; // Errors

这意味着所有commonjs的导出都将在 packageMain 对象,而你需要 点子 到packageMain对象中来获取你所需要的东西。

packageMain.method1()

更多信息请参见 nodejs官方文档


1
投票

确保相关模块有一个 index.js 輸出您想要的代碼 importrequire.

其中 package.json 根据 dependencies 属性添加以下内容。

"myCustomModule":"file:./path/to/myCustomModule"

做完这些后,运行 npm install.

一旦完成,看里面的 node_modules 的项目根目录,你会看到一个名为 myCustonModule.

现在在任何项目文件中,你可以 importrequire 该代码就像你对待其他 mode_module


0
投票

Ivan的回答很有帮助,但我也应该注意到,因为我使用的是node 12.16.3,所以我也需要添加了 --experimental-modules 标志到我的启动脚本中。package.json:

"type": "module",
"scripts": {
    "start": "node --experimental-modules --experimental-json-modules server.mjs",
}
  • "type": "module" 告诉节点你应该使用ES6模块。
  • 文件名 .mjs 进一步明确了我们正在使用的是一个模块的JavaScript文件。
  • --experimental-modules--experimental-json-modules 让你 import 在node 12版本中。

然后我就可以做一些事情,比如 import express from 'express'; 其中express 4.17.1是CommonJS模块),工作正常。

© www.soinside.com 2019 - 2024. All rights reserved.