使用 grunt 的 "bower_concat" 和 "angular-i18n" 的正确方法
Correct way of using grunt's "bower_concat" and "angular-i18n"
如果不使用 grunt 的 "concat" 和 "bower_concat",angular-i18n 是这样使用的:
<html ng-app>
<head>
...
<script src="angular.js"></script>
<script src="i18n/angular-locale_de-de.js"></script>
...
</head>
</html>
(根据这里:https://docs.angularjs.org/guide/i18n)
但是...当然:我正在使用 concat
和 bower_concat
。
我是这样使用它们的:
首先我使用 bower_concat 并创建 build/bower-concat.js
注意: bower_concat 读取 bower_components
中每个子目录的每个 bower.json 并连接所有主要文件。
注2:"angular-18n"的bower.json有"ignore": ["**/.*", ...
然后我将我所有的 js(我的控制器等)连接到 build/inouse-concat.js
- 最后我将
bower-concat.js
与 inhouse-concat.js
连接成 all-concat.js
<script src="build/all-concat.js"></script>
所以我认为我可以在第三步中包含相应的语言环境“angular-i18n/angular-locale_de-de.js
”,如下所示:
// inhouse js with bower's js with angular's i18n into one file
allJsConcat: {
src: ['build/bower-concat.js', 'bower_components/angular-i18n/angular-locale_de-de.js', 'build/inhouse-concat.js',],
dest: 'build/all-concat.js',
}
但这不起作用。我得到:
Uncaught ReferenceError: require is not defined
问题:您如何推荐使用 grunt、concat 和 bower_concat 以及 angular 的语言环境 js?我做错了什么?
妈的,急着问,懒得回答自己的问题了...
无论如何,这有效:
Gruntfile.js
bower_concat: {
all: {
dest: 'build/bower-concat.js',
cssDest: 'build/bower-concat.css',
exclude: [
'angular-i18n'
],
bowerOptions: {
relative: false
}
}
},
concat: {
...
allJsConcat: {
src: ['build/bower-concat.js', 'bower_components/angular-i18n/angular-locale_de-de.js', 'build/inhouse-concat.js',],
dest: 'build/all-concat.js',
}
}
诀窍是使用 grunt-bower-concat
的 exclude
参数。
我认为还有一个 mainFiles
参数也可以解决问题:
mainFiles
Some Bower components don’t list their main files or (more likely)
don’t have bower.json file at all. In this case bower-concat will try
to guess main file but sometimes it can’t or choose wrong one. You
could explicitly define main files for that components.
所以我认为使用它也可以:
mainFiles: {
'angular-i18n': 'angular-locale_de-de.js',
}
没有做 "three file concat"(这样更优雅)
如果不使用 grunt 的 "concat" 和 "bower_concat",angular-i18n 是这样使用的:
<html ng-app>
<head>
...
<script src="angular.js"></script>
<script src="i18n/angular-locale_de-de.js"></script>
...
</head>
</html>
(根据这里:https://docs.angularjs.org/guide/i18n)
但是...当然:我正在使用 concat
和 bower_concat
。
我是这样使用它们的:
首先我使用 bower_concat 并创建
build/bower-concat.js
注意: bower_concat 读取bower_components
中每个子目录的每个 bower.json 并连接所有主要文件。
注2:"angular-18n"的bower.json有"ignore": ["**/.*", ...
然后我将我所有的 js(我的控制器等)连接到
build/inouse-concat.js
- 最后我将
bower-concat.js
与inhouse-concat.js
连接成all-concat.js
<script src="build/all-concat.js"></script>
所以我认为我可以在第三步中包含相应的语言环境“angular-i18n/angular-locale_de-de.js
”,如下所示:
// inhouse js with bower's js with angular's i18n into one file
allJsConcat: {
src: ['build/bower-concat.js', 'bower_components/angular-i18n/angular-locale_de-de.js', 'build/inhouse-concat.js',],
dest: 'build/all-concat.js',
}
但这不起作用。我得到:
Uncaught ReferenceError: require is not defined
问题:您如何推荐使用 grunt、concat 和 bower_concat 以及 angular 的语言环境 js?我做错了什么?
妈的,急着问,懒得回答自己的问题了...
无论如何,这有效:
Gruntfile.js
bower_concat: {
all: {
dest: 'build/bower-concat.js',
cssDest: 'build/bower-concat.css',
exclude: [
'angular-i18n'
],
bowerOptions: {
relative: false
}
}
},
concat: {
...
allJsConcat: {
src: ['build/bower-concat.js', 'bower_components/angular-i18n/angular-locale_de-de.js', 'build/inhouse-concat.js',],
dest: 'build/all-concat.js',
}
}
诀窍是使用 grunt-bower-concat
的 exclude
参数。
我认为还有一个 mainFiles
参数也可以解决问题:
mainFiles
Some Bower components don’t list their main files or (more likely) don’t have bower.json file at all. In this case bower-concat will try to guess main file but sometimes it can’t or choose wrong one. You could explicitly define main files for that components.
所以我认为使用它也可以:
mainFiles: {
'angular-i18n': 'angular-locale_de-de.js',
}
没有做 "three file concat"(这样更优雅)