Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.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
Javascript NPM包:重命名包目录_Javascript_Node.js_Npm - Fatal编程技术网

Javascript NPM包:重命名包目录

Javascript NPM包:重命名包目录,javascript,node.js,npm,Javascript,Node.js,Npm,我有一个小脚本,它使用npmpack打包某个nodejs模块。当我解压缩由npm pack命令创建的.tgz时,其中的目录名为package。我的问题是,是否有办法将这个包重命名为项目的实际名称 Package.json { "name": "package_name", "version": "0.0.3", "description": "A description", "main": "server.js", "scripts": { "test"

我有一个小脚本,它使用
npmpack
打包某个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
格式用于内部消费,因此npm不提供将名称从
package
更改为其他名称的功能

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

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


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

npm pack创建的tar似乎需要有特定的格式。根据npm中的
pack.js
,它的目的是通过npm repository公开,因此除非您重建自己的npmI,否则无法覆盖此行为。我在这里提出了一个问题:nnyby指出:
使用GNU版本的tar,命令是:tar--transform='s,package/,foo/,'-xvzf foo-1.0.0.tgz
应该是
tar-xvz-s/package/foo/-f foo-1.0.0.tgz
(注意sed-like替换字符串后面的额外斜杠)。谢谢!我已经习惯了尾随斜杠是可选的vim。但有什么意义呢?在我的情况下,
npm安装
使用路径中的
package
文件夹解包,然后抱怨找不到其中的模块。。。好。。。因为路径中有额外的
文件夹。