【发布时间】:2015-04-23 06:28:28
【问题描述】:
你如何一起使用 Webpack 和 AngularJS,模板加载和资源的按需获取如何?
非常感谢为此目的编写的 webpack.config.js 文件的示例。
此处显示的所有代码 sn-ps 都可以通过this github repo 访问。代码大量改编自this packetloop git repo。
webpack.config.json
var path = require('path');
var ResolverPlugin = require("webpack/lib/ResolverPlugin");
var config = {
context: __dirname,
entry: ['webpack/hot/dev-server', './app/app.js'],
output: {
path: './build',
filename: 'bundle.js'
},
module: {
loaders: [{
test: /\.css$/,
loader: "style!css-loader"
}, {
test: /\.scss$/,
loader: "style!css!sass?outputStyle=expanded"
}, {
test: /\.jpe?g$|\.gif$|\.png$|\.svg$|\.woff$|\.ttf$/,
loader: "file"
}, {
test: /\.html$/,
loader: "ngtemplate?relativeTo=" + path.join(__dirname, 'app/') + "!raw"
}]
},
// Let webpack know where the module folders are for bower and node_modules
// This lets you write things like - require('bower/<plugin>') anywhere in your code base
resolve: {
modulesDirectories: ['node_modules', 'lib/bower_components'],
alias: {
'npm': __dirname + '/node_modules',
'vendor': __dirname + '/app/vendor/',
'bower': __dirname + '/lib/bower_components'
}
},
plugins: [
// This is to help webpack know that it has to load the js file in bower.json#main
new ResolverPlugin(
new ResolverPlugin.DirectoryDescriptionFilePlugin("bower.json", ["main"])
)
]
};
module.exports = config;
要将 AngularJS 导入主 app.js,请执行以下操作:
app/vendor/angular.js
'use strict';
if (!global.window.angular) {
require('bower/angular/angular');
}
var angular = global.window.angular;
module.exports = angular;
然后像这样在app.js中使用,
app.js
...
var angular = require('vendor/angular');
// Declare app level module
var app = angular.module('myApp', []);
...
下面的说法正确吗?有没有更简单的方法来做到这一点?我看过一些(以任何标准衡量都不是很多)帖子,其中列出了另一种方法。
// Add to webpack.config.js#module#loaders array
{
test: /[\/]angular\.js$/,
loader: "exports?angular"
}
还有另一个插件正在开发中,地址为stackfull/angular-seed。看起来方向是对的,但现在真的很难用。
Webpack 非常棒,但缺乏文档和示例正在扼杀它。
【问题讨论】:
-
Angular 本身与 webpack 完美开箱即用 -
var angular = require('angular')。您还可以要求您的模块在每个模块上具有name属性 -var myModule = require('./myModule'); angular.module('foo', [myModule.name])。有一些例外 - ui 路由器是一个值得注意的路由器,它不会导出模块对象,而是导出模块名称本身。 -
这也是一个不错的起点。它帮助了我。 egghead.io/lessons/angularjs-angular-with-webpack-introduction
-
angular 不能使用以下语法开箱即用:var angular = require('angular') without your app/vendor/angular.js。如果你使用导出加载器并使用 angular,你可以在没有 vendor/angular.js 的情况下让它工作。另请注意,您的依赖项应该是 npm 依赖项。 Bower 依赖项不适用于导出加载程序。
标签: javascript angularjs webpack