发布NPM以外的Node.js包

时间:2018-01-28 06:09:26

标签: node.js npm

我已经使用Node.js几年了,但仅限于小型自包含项目。

我最近一直在研究如何创建包并将其包含('require')到更大的项目中。根据我的理解,这些包都是本地的(项目的一部分),或者是在NPM网站上发布/拉出的。

但是如果我创建一个自包含的包并且不想将它发布到NPM,因为它包含专有代码,我无法看到如何正确地创建,管理和发布(到内部服务器)这样的包。

过去十年我使用过Java和Maven,这个堆栈对我来说非常好用。您将模块/库包装到JAR文件中,然后将它们发布到本地服务器(即:Artifactory,Nexus或其他)。当DEV“需要”依赖/包时,它将搜索我们的本地存储库管理器,如果在该级别找不到,则查看Maven中央存储库(在Internet上)。效果非常好。

我们如何使用Node.js + packages + NPM进行相同的操作?我搜索过,但发现那里的信息非常有限。

任何指向教程,文章或任何内容的链接都将受到赞赏。

更新时间:2018.01.29 14:45

我发现这些文献似乎表明你可以运行自己的NPM注册表!! Can I Run My Own Private Registery?

另外,我在Dependencies section of 'package.json'找到了以下内容,其中显示了:

{ "dependencies" :
  { "foo" : "1.0.0 - 2.9999.9999"
  , "bar" : ">=1.0.2 <2.1.2"
  , "baz" : ">1.0.2 <=2.3.4"
  , "boo" : "2.0.1"
  , "qux" : "<1.0.0 || >=2.3.1 <2.4.5 || >=2.5.2 <3.0.0"
  , "asd" : "http://asdf.com/asdf.tar.gz"
  , "til" : "~1.2"
  , "elf" : "~1.2.3"
  , "two" : "2.x"
  , "thr" : "3.3.x"
  , "lat" : "latest"
  , "dyl" : "file:../dyl"
  }
}

以下是有趣的。

"asd" : "http://asdf.com/asdf.tar.gz"

可能表示您可以从自己的服务器中提取包。我一定会尝试并报告回来。

更新时间:2018.01.30 16:17

好的,虽然我非常有信心你可以实际配置NPM来选择性地发布本地或你自己的注册表(服务器),但我对以下内容非常满意:

首先,创建单独的NPM包(即:npm init)并实现它。

其次,使用npm version 1.2.3设置您的版本。在您添加和维护代码时,您将使用npm version majornpm version minornpm version patch之一调整版本。

第三,准备发布时,从内部您的NPM包中调用npm pack。这将创建一个压缩的tarball(tgz)文件(即: foo-bar-1.2.3.tgz )。

第四,您现在可以独立管理这些文件,例如将它们复制到您自己的服务器,甚至是诸如Artifactory之类的存储库管理器。

第五,如果您需要私有包,只需在每个项目中输入npm install --save foo-bar-1.2.3.4.tgz,如果您已手动下载包,或npm install --save https://repo-server.com/some/path/foo-bar。下载哪个版本取决于您使用的环境(开发,测试,阶段或产品)。或者您甚至可以在URL中强制使用版本号(您的存储库服务器应该支持各种API调用)。

通过安装私有软件包,NPM应自动下载并安装所有依赖项。我说“应该”因为我没有证实这一点。

2 个答案:

答案 0 :(得分:3)

也许您可以做的是将其发布在GitHub和您的package.json中,您可以直接从存储库中调用这样的内容:

"dependencies": {
  "mongoose-cipher": "git+ssh://git@github.com:estrada9166/mongoose-
  cipher.git"
}

"dependencies": {
  "mongoose-cipher": "git+https://git@github.com:estrada9166/mongoose-
  cipher.git"
}

如果您的存储库有一个版本,您也可以指定该版本,例如:

"dependencies": {
  "mongoose-cipher": "git+ssh://git@github.com:estrada9166/mongoose-
  cipher.git#v0.0.7"
}

您可以使用您的包创建一个私人存储库,通过这种方式它是安全的!

答案 1 :(得分:1)

私人存储库:

如果您想托管私有软件包,这些私有软件包也将请求代理到npmjs.org,则可以使用以下任一方法:

Nexus OSS 3.x具有作为通用存储库的优势(即支持npm,maven等)。

自包含包:

正如您已经提到的,npm pack会生成tarball,这些tarball可以直接作为对其他软件包的依赖关系而包含在内。 但是,您还可以使用package.json中的bundledProperties创建包含所有依赖项的tarball 。这样,您在提取压缩包时就不需要调用npm install。使用此方法的唯一警告是,如果开发和生产机器的体系结构不同,则本机模块可能无法工作。