为什么在升级到Webpack 4后运行我的Webpack插件时未定义`window`?

时间:2018-04-30 14:20:03

标签: node.js webpack webpack-4 webpack-plugin

我为Webpack写了a plug-in,它接受​​我生成的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

(请注意,此示例取决于所谓的违规列。如您所见,第286行实际上未提及window。)

我对Webpack并不熟悉,关于插件的文档相对稀少,所以非常欢迎任何关于如何更接近解决这个问题的指示/

1 个答案:

答案 0 :(得分:0)

在你的根目录下添加.js文件可能会有效。

if (typeof window === 'undefined') { global.window = {}; }