Зачем мне устанавливать global.window при использовании UMD в Node? - PullRequest
0 голосов
/ 25 июня 2019

У меня есть следующее ...

// src/index.mjs
class DoSomething{
    constructor(){
        console.log("Constructing");
    }
    doSomethingElse(){
        console.log("Something else");
    }
}

export { DoSomething };

// webpack config
const path = require('path');
module.exports = {
  entry: path.resolve(__dirname, 'src/index.mjs'),
  output: {
      filename: 'sce-umd.js',
      libraryTarget: 'umd'
  },
  module: {
      rules: [
          {
              test: /\.mjs$/,
              exclude: /(node_modules|bower_components)/,
              use: {
                  loader: 'babel-loader',
                  options: {
                      presets: ['@babel/preset-env']
                  }
              }
          }
      ]
  }
}

Но когда я хочу использовать его в скрипте узла, я сначала должен объявить окно следующим образом ...

// WTF
global.window = global;
var DoSomething = require("../dist/sce-umd.js").DoSomething;
(function(){
    var instance = new DoSomething();
    instance.doSomethingElse();
})()

или же я получаю ...

ReferenceError: окно не определено

Итак, WTF?

(вот код)

1 Ответ

1 голос
/ 29 июня 2019

В выводе пропущено несколько вещей.

index.mjs

class DoSomething {
  constructor() {
    console.log("Constructing");
  }
  doSomethingElse() {
    console.log("Something else");
  }
}

export default DoSomething;

Webpack:

output: {
  filename: './sce-umd.js',
  library: 'DoSomething',
  libraryTarget: 'umd',
  libraryExport: 'default',
  umdNamedDefine: true,
  globalObject: 'this'
},
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...