Webpack对于我们编写同构Javascript非常有用,并且npm在捆绑时交换浏览器全局变量的包.
所以,如果我想node-fetch npm在Node.js 上使用该包但在捆绑时将其排除,并且只使用本机浏览器fetch全局,我可以在我的中提及webpack.config.js:
{
externals: {
'node-fetch': 'fetch',
'urlutils': 'URL',
'webcrypto': 'crypto', // etc
}
}
Run Code Online (Sandbox Code Playgroud)
然后我的CommonJS要求const fetch = require('node-fetch')将被转换为const fetch = window.fetch(或无论它做什么).
到现在为止还挺好.这是我的问题:当需要整个模块时,这很容易,但是当我需要一个导出模块的子模块/单个属性时呢?
例如,假设我想使用WhatWG URL标准,同构.我可以使用整个URL类的urlutils npm模块module.exports,所以我的要求如下:
const URL = require('urlutils')
Run Code Online (Sandbox Code Playgroud)
然后我可以urlutils在我的externals部分列出,没有概率.但是,当我想要使用更新的(并且更受支持的)npm软件包时whatwg-url,我不知道如何对其进行Webpack,因为我的要求如下:
const { URL } = require('whatwg-url')
// or, if you don't like destructuring assignment
const URL = require('whatwg-url').URL
Run Code Online (Sandbox Code Playgroud)
如何告诉Webpack替换require('whatwg-url').URL …