Почему `window` не определено при запуске моего плагина Webpack после обновления до Webpack 4? - PullRequest
0 голосов
/ 30 апреля 2018

Я написал плагин для 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, и документации по плагинам относительно мало, поэтому любые указания о том, как приблизиться к решению этой проблемы, очень приветствуются /

1 Ответ

0 голосов
/ 15 мая 2018

Добавьте это в свой корневой файл .js, вероятно, будет работать.

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

...