2016-02-23 133 views
9

我這樣的配置的WebPack:爲什麼需要(「角」)返回一個空對象

resolve: { 
    alias: { 
     angular: path.join(__dirname, './node_modules/angular/angular.js') 
    } 
}, 

,在我的文件我需要的角度是這樣的:

var angular = require("angular"); 

但由於某些原因一個空的對象被返回,爲什麼?

+1

Angular 1不支持CommonJS模塊,所以它'導出'一個空對象。 相反,只需要它(沒有分配結果): require('angular') – Rahul

+0

是的,它的工作現在,謝謝,你可以發佈它作爲答案? –

+0

請檢查我的回答 – Rahul

回答

4

其他答案沒有提供工作解決方案。確實,Angular 1與webpack開箱即用(請參閱https://github.com/webpack/webpack/issues/2049)不能很好地配合使用,但它可以使用墊片加載。試試這個的WebPack裝載機配置:

module: { 
    loaders: [ 
     /* 
     * Necessary to be able to use angular 1 with webpack as explained in https://github.com/webpack/webpack/issues/2049 
     */ 
     { 
      test: require.resolve('angular'), 
      loader: 'exports?window.angular' 
     }, 
    ] 
}, 
plugins: [ 
    new webpack.ProvidePlugin({ 
     'angular': 'angular', 
    }), 
], 

這應該初始化角度對象,而不是正確的它設置爲空對象的默認操作(不具有屬性命名模塊)。

1

Angular 1不支持CommonJS模塊,所以它'導出'一個空對象。

相反,只需要它(不分配的結果):

require('angular') 
1

概念性的答案 -

角1.x的不支持CommonJS模塊的關注對象的方法爲什麼出口單產empty object

var angular = require("angular"); 

因此,更好地省略var angular部分,只是利用require("angular");

3

其他的答案是不太準確 - 這是真的,核心angular.js文件不支持CommonJS的,但如果你從NPM安裝吧,提供了一個叫做index.js的小封裝文件。這實際上只是兩行:

require('./angular'); // Runs angular.js, which attaches to the window object 
module.exports = angular; // Exports the global variable 

這使您可以在CommonJS環境中使用它,例如正常。所以,如果你更新你的配置,像這樣,它應該工作:

resolve: { 
    alias: { 
     angular: path.join(__dirname, './node_modules/angular/index.js') 
    } 
}, 

(這就是說,這應該是的WebPack的默認行爲,即使你不別名angular,爲index.js在其package.json標記爲角的主文件 - 你可能可以逃脫,只是根本沒有別名!)

+0

太好了,謝謝你的建議,我一定會試試 –

+0

這對我有很大的幫助!謝謝! –

+0

無論出於何種原因,該包裝並沒有做到這一點。 require('angular')之後的「angular」變量是空對象,但window.angular包含適當的角對象。因此,這個加載器配置是必需的:{test:require.resolve('angular'),loader:'exports?'窗口。角度'}, – Motin

相關問題