javascript - Webpack:试图公开捆绑的对象以供其他脚本使用,对象仍然未定义
问题描述
我正在尝试了解基础知识,将 jsx 文件转换为 js。但是,我的转译代码需要由非转译代码调用。output.library 应该对此有所帮助。
在生成的包中,我看到了 var react 的定义。但就在逐步浏览整个捆绑包之后,很明显 react 仍然没有设置好。
我的 webpack.config.js
var webpack = require('webpack');
var path = require('path');
module.exports = {
entry: "./public/js/ui/react/dialog.jsx",
output: {
path: path.resolve(__dirname, "public/js/ui/react/"),
filename: "bundle.js",
libraryTarget: "var",
library: "react"
},
resolve: {
extensions: ['.js', '.jsx']
},
module: {
rules: [
{
test: /\.jsx$/,
loader: 'babel-loader',
exclude: [
path.resolve(__dirname, "node_modules/")
],
query: {
presets: ['es2015', "react"]
}
}
]
},
node: {
fs: "empty"
}
}
和我试图转译的 jsx:
'use strict';
react.Dialog = class extends React.Component {
render() {
return (
<div class="bubble-speech">Hello World</div>
)
}
}
在我的代码的其他地方,在捆绑包之前,我有这个,所以 react.Dialog 分配不是空引用错误:
var react = {};
如果我拿走那一行,bundle.js 将在尝试分配 react.Dialog 时抛出错误。但是如果我把它留在里面, var react 仍然设置为空对象。这似乎是一个矛盾!我在这里想念什么?
解决方案
我认为 react 应该设置为外部定义的全局变量,如下所示:
{
output: {
// export itself to a global var
libraryTarget: "var",
// name of the global var: "Foo"
library: "Foo"
},
externals: {
// require("react") is external and available
// on the global var React
"react": "React"
}
}
推荐阅读
- javascript - JavaScript:TypeError:无法读取未定义的属性“0”
- discord - 如何让机器人克隆一个表情到服务器
- java - Selenium WebDriver Java 推出带有解压扩展的 Edge Chromium
- python - 有没有办法从列表中的字典创建数据框?
- javascript - 为交替背景创建循环或播放状态
- laravel-8 - 当依赖于 laravel livewire 中的其他值时,selectpicker 的初始化失败
- azure-devops - 使用 Azure Devops 在 iOS 应用程序中自动增加版本号
- javascript - 使用 JavaScript 解析完整的 HTML 块
- javascript - 如何准确更新firebase web上的字段
- c++ - 禁止函数的返回引用被赋值覆盖