发布大型NPM包

时间:2017-04-21 13:03:14

标签: node.js npm v8

我试图将大型npm包发布到私有的Nexus 3 nmp存储库,但操作失败并出现以下错误

@pixel_count

问题出在V8级别,在构建向Nexus发布请求时出现。

发布大型npm软件包并不是一个好习惯,但它是第三方插件,我们需要它来进行项目。

有没有办法配置/补丁V8以支持更大的文件大小?

将npm包上传到nexus的请求格式是什么,所以我可以尝试使用其他工具将包转换为编码字符串?

2 个答案:

答案 0 :(得分:2)

npm publish -timeout=9999999 这帮助我发布了150mb的程序包

答案 1 :(得分:1)

我使用CURL发布了这个包。请求的格式是

curl -H "Content-Type: application/json"\
-H "Authorization: Basic ${authorization_token}"\
-H "Content-Length: ${actual size of the request body in bytes (just check the size of the request body file)}"\
-H "Accept-Encoding: gzip"\
-H "version: 8.1.1"\
-H "Accept: application/json"\
-H "npm-session: a972cb330cbacab5"\
-H "npm-in-ci: false"\
-H "User-Agent: node/v7.7.4"\
-H "Host: nexus.example.com:8081"\
-X PUT\
--data-binary @path_to_request_body_file\
--verbose\
http://nexus.example.com:8081/nexus/repository/npmrepo/ExamplePackage

nexus.example.com:8081 - 是实际的nexus服务器主机和端口
authorization_token - 是nexus授权令牌
npmrepo - 是一个通过Nexus Repository Manager创建的npm存储库,其中ExamplePackage将被发布。 path_to_request_body_file - 应该是请求正文文件的文件路径,内容格式如下

{
  "_id": "ExamplePlugin",
  "name": "ExamplePlugin",
  "description": "Example Plugin",
  "dist-tags": {
    "latest": "0.1.0"
  },
  "versions": {
    "0.1.0": {
      "name": "ExamplePlugin",
      "version": "0.1.0",
      "cordova_name": "ExamplePlugin",
      "description": "Example Plugin",
      "license": "Apache 2.0",
      "keywords": [
        "ExamplePlugin",
        "StackoverflowExample"
      ],
      "platforms": [
        "ios",
        "android"
      ],
      "engines": [],
      "dependencies": {},
      "maintainers": [
        {
          "name": "example_nexus_user",
          "email": "example.user@test.com"
        }
      ],
      "_id": "ExamplePlugin@0.1.0",
      "dist": {
        "shasum": "${shasum of the package archive file}",
        "tarball": "http://nexus.example.com:8081/nexus/repository/npmrepo/ExamplePlugin/-/ExamplePlugin-0.1.0.tgz"
     }
    }
  },
  "readme": "",
  "access": "public",
  "maintainers": [
    {
      "name": "example_nexus_user",
      "email": "example.user@test.com"
    }
  ],
  "_attachments": {
    "ExamplePlugin-0.1.0.tgz": {
      "content_type": "application/octet-stream",
      "data": "${Base64 encoded content of the npm package archive}",
      "length": "${actual size of the package archive in bytes}"
    }
  }
}

如果包存档文件尚未存在,您可以使用npm pack生成它。
我已使用openssl为包存档base64生成openssl base64 -in ExamplePlugin-0.1.0.tgz -out ExamplePluginEncoded编码字符串,但可以使用支持大文件的任何其他工具。
我使用shasum -a 1 ExamplePlugin-0.1.0.tgz为包存档生成了shasum,也可以使用其他一些工具。

我得到了请求的格式和JSON有效负载调试npm-registry-client,可能不需要某些字段,也可能有更多选项可用。