NPM 包:重命名包目录

cba*_*ass 5 javascript node.js npm

我有一个小脚本,用于npm pack打包某个 nodejs 模块。当我解压缩.tgznpm pack命令创建的目录时,里面的目录名为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"
   }
}
Run Code Online (Sandbox Code Playgroud)

这是我正在使用的代码,可能会有所帮助。

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"
         }
    });
});
Run Code Online (Sandbox Code Playgroud)

Sam*_*kes 5

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

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

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

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