【发布时间】:2023-03-12 03:25:01
【问题描述】:
这篇文章:Can I use an ES6/2015 module import to set a reference in 'global' scope? 回答了“如何使模块在 Webpack 中全局可用?”的问题。通过使用 Webpack 的 ProvidePlugin:
// webpack.config.js
plugins: [
new webpack.ProvidePlugin({
React: "react",
})
],
// Foo.js
class Foo extends React.Component { // React is global
但是,如果我想为命名导出而不是默认导出创建一个全局变量怎么办?换句话说,如果我想做什么:
// Foo.js
class Foo extends React.Component {
propTypes = {
bar: PropTypes.string, // PropTypes were never imported
}
问题是PropTypes 是一个命名导出,这意味着我通常会将其导入为:
import {PropTypes} from 'react';
但我不能在 Webpack 配置中这样做:
new webpack.ProvidePlugin({
{PropTypes}: "react", // this doesn't work
})
所以,我的问题是:有没有办法使用 Webpack 全局公开命名导出(例如 React 的 PropTypes)?
附:我会在我的根 JS 文件中明确地这样做:
// index.js
import {PropTypes} from 'react';
global.PropTypes = PropTypes;
import 'restOfMyCode';
但这不起作用,因为导入被提升并发生在global.PropTypes 设置之前,所以当我的模块被导入时,没有global.PropTypes 可供他们使用。
【问题讨论】: