我正在尝试构建我的资产,以便多个项目可以共享"阶段"构建脚本。例如,如果我有3个基于Web的产品都使用Bootstrap和jQuery,我想只从共享的#34;库中获取库#34;。
建议文件夹的结构如下:
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
我想在每个" app"中使用Gruntfile.js文件夹能够"导入"或以其他方式执行sharedGrunt.js
。我还没有越过那座桥,因为我已经坚持了第一个概念验证测试:一个简单的副本。
因此,在其中一个应用程序的Gruntfile.js
文件中,我有一个如下所示的复制任务:
copy: {
externalTest: {
expand: true,
src: '../shared/lib/jQuery.js',
dest: 'dev/js/jQuery.js',
flatten: true
}
}
正如您所看到的,我尝试从Gruntfile升级一级。哪个目录包含"共享"," app1"和" app2"。然后导航回到共享的lib文件夹以获取jQuery。
任务是'#34;成功" (不会抛出实际错误),但不会复制任何文件。
我如何实现目标?我需要放一个" catch-all" gruntFile成为父母"包含所有项目的文件夹?我不希望开发人员要求检查整个父母。我希望开发人员能够查看" app1"和#34;分享"和它一起运行。
答案 0 :(得分:1)
这很奇怪--Grunt上升任何级别都没有问题,在我的机器上你的代码确实复制了1个文件。
但是,您使用expand
会导致grunt将dest
属性用作目录,因此您的文件最终为dev/js/jQuery.js/jQuery.js
(请注意重复)。
通过执行修复:
copy: {
externalTest: {
expand: true,
src: '../shared/lib/*.js',
dest: 'dev/js',
flatten: true
}
}
答案 1 :(得分:1)
在Xavier的回答中提出的意见提示,我向前迈进,并确定我有两个缺点:
我应该只提供目标目录。如果我尝试提供文件名,它将创建一个额外的目录,其名称为我认为的文件名;这是泽维尔的观察结果。
如果你不发出" cwd"对于副本,它从源端再现整个目录树。
所以,以下内容:
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"
结束。