Gruntjs Grunt任务可以导航吗;“向上”;从运行它们的文件夹中?
我正在尝试构建我的资产,以便多个项目可以共享构建脚本的“阶段”。例如,如果我有3个基于web的产品都使用Bootstrap和jQuery,那么我只想从共享的“库”中获取库 建议文件夹的结构如下所示:Gruntjs Grunt任务可以导航吗;“向上”;从运行它们的文件夹中?,gruntjs,grunt-contrib-copy,Gruntjs,Grunt Contrib Copy,我正在尝试构建我的资产,以便多个项目可以共享构建脚本的“阶段”。例如,如果我有3个基于web的产品都使用Bootstrap和jQuery,那么我只想从共享的“库”中获取库 建议文件夹的结构如下所示: shared -sharedGrunt.js (file) -lib (folder) -bootstrap (folder) -jQuery.js (file) app1 -Gruntfile.js (file) -src (folder) -images
shared
-sharedGrunt.js (file)
-lib (folder)
-bootstrap (folder)
-jQuery.js (file)
app1
-Gruntfile.js (file)
-src (folder)
-images (folder)
-js (folder)
-etc
app2
-Gruntfile.js (file)
-src (folder)
-images (folder)
-js (folder)
-etc
copy: {
externalTest: {
expand: true,
src: '../shared/lib/jQuery.js',
dest: 'dev/js/jQuery.js',
flatten: true
}
}
我希望每个“app”文件夹中的Gruntfile.js能够“导入”或以其他方式执行sharedGrunt.js
。我还没有跨过这座桥,因为我被困在第一个概念验证测试中:一个简单的副本
因此,在应用程序的Gruntfile.js
文件中,我有一个复制任务,如下所示:
shared
-sharedGrunt.js (file)
-lib (folder)
-bootstrap (folder)
-jQuery.js (file)
app1
-Gruntfile.js (file)
-src (folder)
-images (folder)
-js (folder)
-etc
app2
-Gruntfile.js (file)
-src (folder)
-images (folder)
-js (folder)
-etc
copy: {
externalTest: {
expand: true,
src: '../shared/lib/jQuery.js',
dest: 'dev/js/jQuery.js',
flatten: true
}
}
正如你所看到的,我试图从Gruntfile升级一级。这是包含“shared”、“app1”和“app2”的目录。然后向下导航到共享库文件夹,以获取jQuery
任务“成功”(未引发实际错误),但未复制任何文件
我怎样才能实现我的目标?我是否需要将“catch all”gruntFile放入包含所有项目的“parent”文件夹中?我不希望开发人员要求检查整个父级。我希望开发人员能够签出“app1”和“shared”并使用它运行。这很奇怪-Grunt在任何级别上都没有问题,在我的机器上,您的代码确实复制了1个文件 但是,使用
expand
会导致grunt使用dest
属性作为目录,因此您的文件最终是dev/js/jQuery.js/jQuery.js
(注意重复)
通过以下操作修复:
copy: {
externalTest: {
expand: true,
src: '../shared/lib/*.js',
dest: 'dev/js',
flatten: true
}
}
在Xavier回答中的观察结果的推动下,我继续前进,并确定我有两个缺陷:
share: {
expand: true,
src: '../common/lib/jquery.js',
dest: 'dev/js/'
}
结果在目标中找到一个名为“dev/common/lib/jquery.js”的文件。这不是故意的行为
解决方案:
share: {
expand: true,
cwd: '../common/lib',
src: 'jquery.js',
dest: 'dev/js/'
}
结果生成一个源于
“./common/lib/jquery.js”
的文件,并按预期在目标“dev/js/jquery.js”
处结束。感谢您确认它应该工作;您还告诉我只提供目标目录而不是文件名。还有一些其他的问题,但由于这个答案,我最终找到了我的解决方案。