使用 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

但是...当然:我正在使用 concatbower_concat
我是这样使用它们的:

  1. 首先我使用 bower_concat 并创建 build/bower-concat.js

    注意: bower_concat 读取 bower_components 中每个子目录的每个 bower.json 并连接所有主要文件。

    注2:"angular-18n"的bower.json有"ignore": ["**/.*", ...

  2. 然后我将我所有的 js(我的控制器等)连接到 build/inouse-concat.js

  3. 最后我将 bower-concat.jsinhouse-concat.js 连接成 all-concat.js
  4. <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-concatexclude 参数。

我认为还有一个 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"(这样更优雅)