没有窗口对象存在webpack nodejs

Rod*_*igo 3 javascript node.js webpack

我正在使用带有babel的webpack来编译我的ecmascript 6代码.一切正常,但如果我添加某些dependeciens喜欢请求npm包.这是我的文件:

main.js

import os from 'os'

export class User {

  constructor(username) {
    this.username = username;
  }

  register() {
    console.log("registering...");
  }
}

var client = new User("hey")


console.log(user.register());
Run Code Online (Sandbox Code Playgroud)

webpack配置:

var webpack = require('webpack')

module.exports = {
  entry: [
    './src/main.js'
  ],
  output: {
    path: "dist",
    publicPath: "/dist/",
    filename: "stela.js"
  },
  watch: false,
  module: {
    loaders: [{
      test: /\.js$/,
      // excluding some local linked packages.
      // for normal use cases only node_modules is needed.
      exclude: /node_modules/,
      loader: 'babel'
    }, {
      test: /\.json$/,
      loader: 'json-loader'
    }]
  },
  externals: {
    fs: '{}',
    tls: '{}',
    net: '{}',
    console: '{}'
  },
  babel: {
    presets: ['es2015'],
    plugins: ['transform-runtime']
  },
  resolve: {
    modulesDirectories: ['node_modules']
  }
}
Run Code Online (Sandbox Code Playgroud)

现在,如果我跑webpack,然后运行node dist/stella.js一切正常,它会退出registering...; 但是,如果我添加某些依赖项,如requestsnpm包:

...
import request from 'request'
...
Run Code Online (Sandbox Code Playgroud)

我运行webpack一切编译没有错误,但然后我尝试运行node dist/stella.js,我得到这个错误:

throw new Error('no window object present');
Run Code Online (Sandbox Code Playgroud)

Joe*_*lay 11

默认情况下,Webpack设置为以浏览器为目标,而不是Node环境.尝试target在配置中进行设置:

module.exports = {
    // ...
    target: "node",
    // ...
}
Run Code Online (Sandbox Code Playgroud)