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 …