我有一个node app,我想用标准的ES6模块格式(即 "type": "module"
中的 package.json
,并使用 import
和 export
而不需要移植到ES5中。但是,我想利用一些旧的库,如使用CommonJS的Express和socket.io。 require
格式。我有哪些选择(截至52020,Node 12.16.3),可以将CommonJS模块组合到ES6应用中?
使用CommonJS模块是非常直接的。default
从CommonJS模块导出。
import packageMain from 'commonjs-package'; // Works
import { method } from 'commonjs-package'; // Errors
这意味着所有commonjs的导出都将在 packageMain
对象,而你需要 点子 到packageMain对象中来获取你所需要的东西。
packageMain.method1()
更多信息请参见 nodejs官方文档
确保相关模块有一个 index.js
輸出您想要的代碼 import
或 require
.
其中 package.json
根据 dependencies
属性添加以下内容。
"myCustomModule":"file:./path/to/myCustomModule"
做完这些后,运行 npm install
.
一旦完成,看里面的 node_modules
的项目根目录,你会看到一个名为 myCustonModule
.
现在在任何项目文件中,你可以 import
或 require
该代码就像你对待其他 mode_module
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模块),工作正常。