Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 如何使用grunt debian包填充源包?_Node.js_Gruntjs_Debian_Packaging - Fatal编程技术网

Node.js 如何使用grunt debian包填充源包?

Node.js 如何使用grunt debian包填充源包?,node.js,gruntjs,debian,packaging,Node.js,Gruntjs,Debian,Packaging,我使用NodeJS和grunt+grunt debian包来构建.deb文件,它可以很好地创建部署文件foo_v.v.v_all.deb 我还想在debian源代码包(foo_v.v.v.tar.xz)中分发普通的和未加密的源文件,但该文件相当空 要正确填充源文件,我必须做什么 我的环境: 当前目录:/home/dev/src/foo myGrunt.js的相关部分 debian_package: { options: { maintainer: { name: "xxx

我使用
NodeJS
grunt
+
grunt debian包
来构建
.deb
文件,它可以很好地创建部署文件
foo_v.v.v_all.deb

我还想在debian源代码包(foo_v.v.v.tar.xz)中分发普通的和未加密的源文件,但该文件相当空

要正确填充源文件,我必须做什么

我的环境:
当前目录:
/home/dev/src/foo

my
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']);
检查文件的结果:

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
我希望目录
/home/dev/src/foo/app
中的所有文件都包含在文件
tmp/foo_0.1.63.tar.xz


我该怎么办?我应该更新
Makefile
?如果是:如何操作?

在Debian打包中,
tar.xz
(称为“orig tarball”)的内容在打包开始之前固定。由于grunt似乎正在生成这个tarball,您可能需要在grunt中找到或添加一个选项,以将实际的源代码包含在(tarball)中。奇怪的是,由于它是源tarball,默认情况下它没有

Debian本身使用的另一个解决方案是创建一个包含源代码的
foo-source\u 0.1.63\u all.deb


(是的,您可以在构建过程中使用
tar.xz
,但这不仅难看得无法形容,而且可能会破坏各种校验和)

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

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

 grunt.initConfig({
     config: {
         // [...]
         src_pkg: 'node_modules/grunt-debian-package/packaging
  },
然后,我在
copy
任务中为源代码添加了一个部分,将自己的源代码与节点_模块分开:

    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
                ]
            }]
        },
     },
在命令行上,通过调用

grunt package
。。。在
/tmp
中,您可以找到完整的tarball(查看大小!):

grunt.registerTask('package', [
    'copy:src_pkg', 
    'copy:src_pkg_modules', 
    'debian_package']);
grunt package
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