Node.js NodeJS-使用require works导入不起作用
我试图理解为什么对于npm包,Node.js NodeJS-使用require works导入不起作用,node.js,es6-modules,Node.js,Es6 Modules,我试图理解为什么对于npm包,require有效,而import无效。该软件包是r7insight\u node,允许我们将日志发送到他们的产品Rapid7。当我们使用时需要,但当我使用导入时不需要 他们的库有一个src/index.js文件,看起来像: // Use codependency for dynamically loading winston const requirePeer = codependency.register(module); // Import winsto
require
有效,而import
无效。该软件包是r7insight\u node
,允许我们将日志发送到他们的产品Rapid7。当我们使用时需要,但当我使用导入时不需要
他们的库有一个src/index.js
文件,看起来像:
// Use codependency for dynamically loading winston
const requirePeer = codependency.register(module);
// Import winston
const winston = requirePeer('winston', {optional: true});
const Transport = requirePeer('winston-transport', {optional: true});
// If we have successfully loaded winston (user has it)
// we initialize our InsightTransport
if (winston) {
provisionWinston(winston, Transport);
}
// Logger is default export
module.exports = Logger;
// Export as `bunyanStream` to not break existing integration
module.exports.bunyanStream = buildBunyanStream;
module.exports.provisionWinston = provisionWinston;
我的理解是,require
是同步的,是“计算的”,而import
是异步的,不是“计算的”。这就是为什么require
有效而import
无效的原因吗
“计算”是否意味着执行index.js
文件,从而在require
中检查并执行if(winston)
块,而不是在import
中执行?有没有一种方法可以使用import
语句实现同样的效果
提前感谢让包与ES6导入方式一起工作,它必须写入其中,它必须导出为例如:导出默认记录器
,而不是module.exports=Logger
,希望我的回答能帮助您让模块与导入
一起工作,它必须设计为与导入兼容,并且调用者必须以正确的方式导入它。为require()
设计的模块不能自动与import
兼容。