2016-02-29 60 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