saa*_*adq 21 javascript node.js reactjs webpack
我们面临的问题是,我们附加的任何事件侦听器或全局变量window
似乎都不存在于我们的production
构建中(但它们存在于development
构建中)。
webpack --mode=production
语境:
我们有一个用例,我们的 web 应用程序在父应用程序中呈现。父应用程序基本上需要告诉我们何时需要渲染我们的应用程序。为此,我们尝试使用事件侦听器和全局函数。
要在父应用程序中渲染我们的 web 应用程序,会发生以下情况:
myappwebsite.com/asset-manifest.json
。这就像asset-manifest.json
为任何 Web 应用程序创建的默认值create-react-app
。bundle.js
,然后bundle.js
使用此路径进行 HTTP 调用来获取我们的路径(例如myappwebsite.com/bundle.js
)。script
标签注入到他们的集合中head
,并将其src
设置为我们的bundle.js
以加载我们应用程序的捆绑JavaScript。onload
这个新元素的事件。script
儿童应用程序:
// index.tsx
window.addEventListener('renderApp', (event) => {
console.log('This is running!'); // This only prints in `development`
const { rootId } = event.detail;
ReactDOM.render(<App />, document.getElementById(rootId));
})
Run Code Online (Sandbox Code Playgroud)
父应用程序:
// index.tsx
console.log('Dispatch is running!'); // This prints in both `development` and `production`
const renderEvent = new CustomEvent('renderApp', { detail: rootId: 'root' });
// This runs in the script.onload function to wait for our app to load
window.dispatchEvent(renderEvent);
Run Code Online (Sandbox Code Playgroud)
该代码在构建中有效development
,但在production
构建中无效。在 中production
,调度确实执行,但由于某种原因事件侦听器没有执行。当我们尝试在缩小的生产包上设置一些断点时,我们注意到代码addEventListener
在那里,但它实际上并没有执行...这很奇怪,因为它addEventListener
位于子应用程序的顶层index.tsx
并且没有条件添加。
儿童应用程序:
// index.tsx
window.renderApp = (rootId) => {
console.log('Child render is running'); // This only prints in `development`
ReactDOM.render(<App />, document.getElementById(rootId));
})
Run Code Online (Sandbox Code Playgroud)
父应用程序:
// index.tsx
console.log('Render is running!'); // This prints in both `development` and `production`
// This runs in the script.onload function to wait for our app to load
window.renderApp(rootId);
Run Code Online (Sandbox Code Playgroud)
这里同样的问题,代码在构建中有效development
,但在production
构建中无效。在 中production
,调用成功,但全局功能似乎没有打开window
。我可以通过window
在控制台中打印来验证这一点。
似乎我设置的任何全局变量window
或我设置的任何事件侦听器在生产版本中都会被忽略。这是Webpack设计的吗?或者您认为我的配置/构建脚本中有什么问题导致了这种情况的发生?
归档时间: |
|
查看次数: |
1033 次 |
最近记录: |