设定:
Gruntfile
,其中包含以下任务:
concat:{ 构建:{ 档案:{ 'build / app.js':[ 'SRC / 的.js', 'SRC /的 / 的的.js', '!SRC /销售商/ ' ] } }
许多角度模块及其控制器,服务等,具有如下结构:
A / a.js //模块声明如:angular.module('a',[]) a-controller.ks //在根模块定义中设置控制器,如:angular.module('a')。controller()...
问题:
该任务将它在build
文件夹中找到的所有js文件连接到单个app.js
文件,并且它可以正常运行,但在连接时会弄乱文件的顺序< /强>
例如,它首先连接控制器文件而不是包含模块声明的主文件夹文件,从而触发以下错误:
模块xxxx不可用!
我认为问题在于concat
构建文件的方式,这是由grunt核心,特别是minimatch
库完成的,并且它可能将破折号视为首先是字母,但我不知道如何配置来改变这种行为,甚至知道这是否可能。
问题:
所以,问题是:如何使Grunt / Grunt-concat首先处理虚线f而不是同一文件夹中的其他文件,以便保持排序?
由于
更新1:
在挖掘更多之后,似乎它与文件夹内的排序无关,但是Grunt / Core将根文件发送到最后并将它们放在叶子文件中。
答案 0 :(得分:3)
只需指定要连接文件的顺序,按顺序排列,我的意思是,首先添加应该在开始时连接的单个文件,在完整文件夹之后不需要订单,以及最后你的最终文件,像这样粗糙:
grunt.initConfig({
concat: {
js: {
src: ['lib/before.js', 'lib/*', 'lib/after.js'],
dest: 'bundle.js',
}
}
});
答案 1 :(得分:0)
您必须为grunt-concat
任务指定您希望构建文件的顺序。对于我的项目,我通常会保留一个文件夹结构,其中控制器位于app/controllers
文件夹,services
中的服务等,但名称可能会有所不同。我还保留了app.js
声明我的app模块并为其指定配置处理程序。我为grunt-uglify
使用了这样的配置,但concat
可以做同样的事情,几乎没有变化:
uglify: {
development: {
files: {
'public/scripts/app.js': [
'public/app/app.js',
'public/app/controllers/*.js',
'public/app/directives/*.js',
'public/app/services/*.js'
]
}
}
}
答案 2 :(得分:0)
我只是复制粘贴我的答案,你想要的第二张照片上的细节,我希望能帮到你。
你可以考虑这个解决方案
xxx.module.js
在grunt-contrib-concat中修改配置如下:
将此放在 grunt.initConfig
var clientApp =&#39; ./ app /&#39 ;;
grunt-contrib-concat config
dist: {// grab module first, state the second
src: [
clientApp+'**/*-controller.js',
clientApp+'**/*.module.js',
clientApp+'**/*.state.js',
clientApp+'**/*.js'
],
dest: 'dist/<%= pkg.name %>.js'
}
我使用状态,所以我必须在尝试导航到任何状态之前定义状态。这是预览我的代码,模块声明在任何事情之前声明拳头,然后是我的状态。即使缩小也不会造成任何问题。
我希望这对你有所帮助。 我遵循这个johnpapa的风格guide,如果我的解决方案不起作用,你的问题可能会在那里解决