我正在研究相同的解决方案,并且发现以下工具非常好运:
grunt-contrib-concat
这可以将文件从一个位置连接到另一个位置的单个文件中。您可以像这样指定特定文件:
files: {
'dist/app.concat.js': ['app/modules/nav.js', 'app/modules/user.js']
}
或者您可以使用通配符语法来选择多个(甚至排除),如下所示:
files: {
'dist/app.concat.js': [
'app/**/*.js',
'!app/vendor/**/*.js'
] // this excludes anything from the vendor folder being added
}
这是一个完整的例子
concat: {
dist: { // task name, so you call this with 'grunt concat:dist'. You can have different sections under concat for different builds
files: {
'dist/app.concat.js': ['app/**/*.js',
'!app/vendor/**/*.js',
'!app/test/**/*.js'
], // adds all .js files, but excludes anything in vendor and test
'dist/vendor.concat.js': ['app/vendor/**/*.js'],
'dist/app.concat.css': ['app/styles/**/*.css']
}
}
grunt-contrib-copy
这是一个简单的方法,可让您从一个地方复制到另一个地方。如果您想将整个目录结构拉到 (src: [app/**/*.*]
)
copy: {
dist: {
files: [
{
src: ['app/index.html'],
dest: 'dist/'
}
}
grunt-scriptlinker
这是一个可以帮助您动态填写 index.html(或其他)并引用正确文件的方法。它的用法非常简单:您将一些 HTML 注释添加到您的 index.html(或其他)并告诉 scriptlinker 查找它们。然后它将搜索您指向的任何文件集,并在您提供的脚本标签内动态添加对这些文件的引用。我用它在顶部加载 CSS 文件,然后在底部加载 .js 文件:
scriptlinker: {
distCSS: {
options: {
startTag: '<!--CSS SCRIPTS-->',
endTag: '<!--CSS SCRIPTS END-->',
fileTmpl: '\n<link rel="stylesheet" type="text/css" href="%s" />',
appRoot: 'app/'
},
files: {
'dev/app/index.html': ['dist/**/*.css']
}
},
distJS: {
options: {
startTag: '<!--JS SCRIPTS-->',
endTag: '<!--JS SCRIPTS END-->',
fileTmpl: '\n<script src="%s"></script>',
appRoot: 'app/'
},
files: {
'dev/app/index.html': ['dist/vendor/*.js']
},
}
}
所以你可以看到,你告诉它要查找什么标签,要使用什么模板,以及要查看什么文件或目录。它会变成这样:
<html ng-app="ngAD">
<head>
<!--CSS SCRIPTS--><!--CSS SCRIPTS END-->
</head>
<body>
<div class="container">... my app stuff...</div>
<!--JS SCRIPTS--><!--JS SCRIPTS END-->
</body>
</html>
进入这个:
<html ng-app="ngAD">
<head>
<!--CSS SCRIPTS-->
<link rel="stylesheet" type="text/css" href="styles/bootstrap.min.css" />
<link rel="stylesheet" type="text/css" href="modules/navbar/navbar.css" />
<link rel="stylesheet" type="text/css" href="styles/jscrollpane.css" />
<link rel="stylesheet" type="text/css" href="styles/styles.app.css" /><!--CSS SCRIPTS END-->
</head>
<body>
<div class="container">... my app stuff...</div>
<!--JS SCRIPTS-->
<script src="vendor/jquery.min.js"></script>
<script src="vendor/angular.min.js"></script>
<script src="vendor/vendor.concat.js"></script>
<script src="common/common.dist.js"></script>
<script src="modules/modules.dist.js"><!--JS SCRIPTS END-->
</body>
</html>
为了完整起见,我还将向您介绍 grunt-usemin ...它很流行并且具有与 scriptLinker 相似的功能...您可能会更喜欢它。我仍在进行 cachebusting 设置,但我正在使用 cacheBust (grunt-cache-bust),到目前为止,它似乎正在做我想做的事情。如果您有任何具体问题,请告诉我,我也许可以提供更具体的反馈。