如何使用grunt-debian-package填充源代码包?

我使用NodeJSgrunt + grunt-debian-package来构build.deb文件,这对于创build部署文件foo_v.v.v_all.deb可以很好地工作。
我也想分发在debian源包(foo_v.vvtar.xz)中的普通和unagglified源文件,但该文件是空的。

我需要做些什么才能正确填充源文件?

我的环境:
当前目录: /home/dev/src/foo
我的Grunt.js相关部分

 debian_package: { options: { maintainer: { name: "xxx", email: "xxx" }, prefix: "", name: "foo", postfix: "", short_description: "xxx", long_description: "xxx", version: "<%=pkg.version%>", preinst: { src: "scripts/preinst", }, postinst: { src: "scripts/postinst", }, postrm: { src: "scripts/postrm", }, prerm: { src: "scripts/prerm", }, dependencies: "xxx", replaces: "xxx", conflicts: "xxx" }, deploy: { files: [{ expand: true, // enable dynamic expansion cwd: 'dist', // src matches are relative to this path src: ['**'], dest: '/usr/lib/foo' }, { src: "scripts/foo", dest: "/etc/init.d/foo" }, { src: 'root-ca.conf', dest: '/usr/lib/foo/root-ca.conf' }] } } // ----- snip ----- grunt.registerTask('package', ['debian_package']); 

已经正确执行的命令:

 grunt build grunt package 

检查文件的结果:

 ll tmp/ -rw-r--r-- 1 dev dev 22758744 Sep 16 00:10 foo_0.1.63_all.deb -rw-r--r-- 1 dev dev 608 Sep 16 00:10 foo_0.1.63.dsc -rw-r--r-- 1 dev dev 1400 Sep 16 00:10 foo_0.1.63_i386.changes -rw-r--r-- 1 dev dev 76288 Sep 16 00:10 foo_0.1.63.tar.xz tar -tJf tmp/foo_0.1.63.tar.xz packaging/ packaging/debian/ packaging/debian/postinst packaging/debian/compat packaging/debian/postrm packaging/debian/preinst packaging/debian/dirs packaging/debian/source/ packaging/debian/source/format packaging/debian/changelog packaging/debian/prerm packaging/debian/copyright packaging/debian/links packaging/debian/control packaging/debian/rules packaging/Makefile 

我希望将dir /home/dev/src/foo/app中的所有文件包含在文件tmp/foo_0.1.63.tar.xz

我该怎么做呢? 我应该更新Makefile吗? 如果是的话:如何?

最后我得到了它。 我必须正确更新Gruntfile.js。

首先我在config部分定义目标目录:

  grunt.initConfig({ config: { // [...] src_pkg: 'node_modules/grunt-debian-package/packaging }, 

然后我在copy任务中添加了一个源代码部分,从node_modules中分离出自己的源代码:

  copy: { // [...] src_pkg: { files: [{ expand: true, dot: true, dest: '<%= config.src_pkg %>', src: [ '**', '!**/tmp/**', '!**/.tmp/**', '!**/dist/**', '!**/.git/**', '!**/node_modules/**', // node_modules will be copied separately ] }] }, src_pkg_modules: { files: [{ expand: true, cwd: 'node_modules', dest: '<%= config.src_pkg %>/node_modules', src: [ // list all node_modules you want to copy also here ] }] }, }, 

稍后注册任务(这里称为package ):

 grunt.registerTask('package', [ 'copy:src_pkg', 'copy:src_pkg_modules', 'debian_package']); 

在命令行上通过调用启动打包

 grunt package 

…并在./tmpfind完整的压缩包(查看大小!):

 ll tmp/ -rw-r--r-- 1 dev dev 22678070 Okt 6 22:09 foo_0.1.78_all.deb -rw-r--r-- 1 dev dev 617 Okt 6 22:07 foo_0.1.78.dsc -rw-r--r-- 1 dev dev 1408 Okt 6 22:09 foo_0.1.78_i386.changes -rw-r--r-- 1 dev dev 38541304 Okt 6 22:07 foo_0.1.78.tar.xz 

在Debian包装中, tar.xz (称为“orig tarball”)的内容在软件包开始之前已经固定。 由于咕噜声似乎正在生成这个tarball,你可能需要find或者添加一个选项来咕噜咕噜包含实际的源代码)。 它很好奇它不是默认的,因为它源代码压缩包。

Debian自己使用的另一个解决scheme是创build一个包含源代码的foo-source_0.1.63_all.deb包。

(是的, 构build过程中,你可以用tar.xz ,但这不仅难以置信,而且可能会打破各种校验和)