我为 Webpack 编写了一个插件,它获取我生成的 React 组件,在 Node 中呈现它,然后将它插入到生成的 HTML 文档中。
这曾经在 Webpack 3 中运行良好。为了将其升级到 Webpack 4,我替换了
compiler.plugin("after-emit", compilation => {
和
compiler.hooks.afterEmit.tap('prerender-plugin', (compilation) => {
据我所知,这应该足够了。
在插件中,我向 Webpack 询问我生成的包的路径,然后询问require
,大致如下:
const assetHash = Object.keys(compilation.assets).filter(asset => /app(.*).js/.test(asset))[0];
const appFilePath = compilation.assets[assetHash].existsAt;
// The `.default` is needed because it's an ES2015 module
const App = require(appFilePath).default;
但是,由于以下原因,我突然遇到如下错误require
:
ReferenceError: window is not defined
at Object.<anonymous> (/home/vincent/Workspace/Flockademic/stacks/frontend/dist/app.da5512cf55a3c4446086.js:1:286)
...
有问题的代码似乎是一些标准的 Webpack 头等大事:
!function(e,i){if("object"==typeof exports&&"object"==typeof module)module.exports=i();else if("function"==typeof define&&define.amd)define([],i);else{var a=i();for(var o in a)("object"==typeof exports?exports:e)[o]=a[o]}}(window,function(){return function(e){var i={};function a(o){if
(请注意,此示例取决于所谓的违规列。如您所见,window
实际上并未在第 286 列中提及。)
我对 Webpack 不太熟悉,关于插件的文档相对稀缺,因此非常欢迎任何有关如何更接近解决此问题的指示/