2016-02-23 131 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

相关问题