2016-02-29 62 views
3

我使用webpack与babel编译我的ecmascript 6代码。一切工作正常,但如果我添加某些依赖像请求npm包一样。下面是我的文件:没有窗口对象目前webpack nodejs

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()); 

的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'] 
    } 
} 

现在,如果我跑webpack,然后运行node dist/stella.js一切正常,它记录了registering...;但是,如果我添加一定的依赖性,如requests NPM包:

... 
import request from 'request' 
... 

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

throw new Error('no window object present'); 

回答

11

默认,Webpack设置为定位浏览器,而不是Node环境。尝试在您的配置中设置target

module.exports = { 
    // ... 
    target: "node", 
    // ... 
} 
+0

请注意'CommonsChunkPlugin'与'taget:'node''不兼容。如果你有它,那么编译节点时应该删除它。 – Gherman