我试图了解为什么require
不能用于npm软件包而import
可以工作的原因。该软件包为r7insight_node
,可让我们将日志发送到其产品Rapid7。当我们将require
用作per their instructions时,一切正常,但是当我使用import
时,效果不佳。
他们的图书馆有一个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
是异步的并且不是“ written here”的“计算”。是require
工作而import
不工作的原因吗?
“计算”是否意味着执行index.js
文件,并因此在if (winston)
中而不是在require
中检查并执行import
块?有没有一种方法可以使用import
语句来实现相同目的?
预先感谢
答案 0 :(得分:1)
要使该软件包与ES6导入方式兼容,必须将其写入其中,并且必须以export default Logger
而不是module.exports = Logger
的形式导出,希望我的回答对您有所帮助>