NPM打包:重命名包目录

5

我有一个小脚本,使用 npm pack 来打包某个 nodejs 模块。当我解压 npm pack 命令创建的 .tgz 文件时,里面的目录名为 package。我的问题是是否有一种方法将此包重命名为项目的实际名称?

Package.json

{
   "name": "package_name",
   "version": "0.0.3",
   "description": "A description",
   "main": "server.js",
   "scripts": {
      "test": "echo \"Error: no test specified\" && exit 1"
   },
   "author": "",
   "license": "ISC",
   "dependencies": {
      "request": "2.55.0"
   },
   "devDependencies": {
      "grunt": "0.4.5",
      "grunt-contrib-concat": "0.5.1"
   }
}

以下是我使用的代码,可能会有帮助。

npm.load('./some/path', function (er) {
    if (er) {
       res.send("er");
    }
    npm.commands.pack(['./another/path'], function (er, data) {
    if (er) {
       res.send("error");
    }

    var fileName = __dirname+"/projectName-0.0.3.tgz";
    res.sendFile(fileName, {
         headers: {
             "Content-Type": "application/x-tar"
         }
    });
});

npm pack 创建的 tar 文件需要具有特定的格式,因为它的目的是通过 npm 存储库公开。 - Kirill Slatin
根据 npm 中 pack.js最新提交记录,除非重新构建自己的 npm,否则无法覆盖此行为。 - Kirill Slatin
我有同样的问题,我在这里开了一个问题:https://github.com/npm/npm/issues/10227 - nnyby
1个回答

5

@Kirill Slatin是正确的。 npm pack格式是用于内部使用的,因此npm不提供将名称从 package 更改为其他内容的便利方式。

但是,如果您的 tar 支持 -s 开关,则可以在提取时更改名称。 在OSX上,您可以执行以下操作:

tar -xvz -s/package/foo/ -f foo-1.0.0.tgz

(已编辑,感谢David G指出错误。)


nnyby 指出: tar --transform='s,package/,foo/,' -xvzf foo-1.0.0.tgz - Sam Mikes
1
应该是 tar -xvz -s/package/foo/ -f foo-1.0.0.tgz(注意替换字符串后面的额外斜杠)。 - David G
谢谢!我习惯于使用vim,其中尾随斜杠是可选的。 - Sam Mikes
但是这有什么意义呢?在我的情况下,npm install会将其与路径中的package文件夹一起解压缩,然后抱怨无法在其中找到模块...嗯...因为路径中有额外的package文件夹。 - jayarjo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接