我最终将
dist
符号链接到
src
,因为我们需要 Yeoman 来编译 SCSS 和 CoffeScript 文件。遗憾的是,在创建
dist
目录时不能运行
yeoman server
。另外一个不太好的地方是,当你再次运行
yeoman server
时,它会清理
dist
目录。
我计划创建一个 Yeoman 生成器来生成 Trigger 的代码,并添加一些 Grunt 任务,以模仿我在使用 Sinatra 进行测试和开发时创建的 Rakefile 任务(例如
yeoman simulator
、
yeoman device
、
yeoman testflight
)。
编辑:目前我已经直接向我的
gruntfile.js
添加了一些任务。我添加了
grunt-contrib-copy
并添加了以下子任务。
copy: {
app: {
files: {
"src/": "app/**",
},
},
compass: {
files: {
"src/styles/": "temp/styles/**",
}
},
coffee: {
files: {
"src/scripts/": "temp/scripts/**"
}
}
},
我将这些任务添加到了相应的监视命令中,并添加了一个新的监视来监视app
目录。
watch: {
coffee: {
files: 'app/scripts/**/*.coffee',
tasks: 'coffee copy:coffee reload'
},
compass: {
files: [
'app/styles/**/*.{scss,sass}'
],
tasks: 'compass copy:compass reload'
},
app: {
files: [
'app/**/*.{html,png,json,css,js}'
],
tasks: 'copy:app'
},
}
现在,yeoman server
会调用yeoman watch
,并保持src
的最新状态。
我还引入了grunt-shell
来执行以下操作。
shell: {
forge_build: {
command: 'forge build ios 2>&1 | tee output',
stdout: true
},
forge_run_device: {
command: 'forge run ios --ios.device device',
stdout: true
},
forge_run: {
command: 'forge run ios',
stdout: true
}
}
并创建一些任务,例如:
grunt.registerTask("sim", 'copy shell:forge_build shell:forge_run');
grunt.registerTask("device", 'copy shell:forge_build shell:forge_run_device');
虽然我不完全满意它,但它让我能够继续运行yeoman server
并在其他地方打开控制台运行yeoman device
以在设备上启动。 它还将src
目录放在可以进行检查的位置。
最终,我会将其移至yeoman插件,并添加一些更具体的构建任务来为适当的目标(例如iOS、Android)清理src目录,以使目录大小保持较小。
编辑:我创建了grunt-forge
来帮助从Yeoman内部运行forge
。我还写了一篇博客介绍如何为`forge`创建更简洁的输出。