我已经像这样配置了webpack:
resolve: {
alias: {
angular: path.join(__dirname, './node_modules/angular/angular.js')
}
},
在我的文件中我需要像这样的角度:
var angular = require("angular");
但由于某种原因,返回一个空对象,为什么?
答案 0 :(得分:4)
其他答案都不准确 - 核心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')
}
},
(也就是说,即使你不是别名angular
,这应该是Webpack的默认行为,因为index.js
在其中被标记为Angular的主要文件package.json
- 您可能完全不使用别名就可以逃脱!)
答案 1 :(得分:4)
其他答案没有提供有效的解决方案。确实,Angular 1与开箱即用的webpack不能很好地协同工作(参见https://github.com/webpack/webpack/issues/2049),但它可以加载一个垫片。试试这个webpack loader配置:
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',
}),
],
这应该正确初始化角度对象,而不是将其设置为空对象(没有名为module的属性)的默认操作。
答案 2 :(得分:1)
Angular 1不支持CommonJS模块,因此它“导出”一个空对象。
相反,只需要它(不指定结果):
require('angular')
答案 3 :(得分:1)
概念性答案 -
Angular 1.x 不支持CommonJS
模块,这就是为什么以下导出方法产生empty object
的原因:
var angular = require("angular");
因此,最好省略var angular
部分,只使用require("angular");