我已经使用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 major
,npm version minor
或npm 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应自动下载并安装所有依赖项。我说“应该”因为我没有证实这一点。
答案 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
。使用此方法的唯一警告是,如果开发和生产机器的体系结构不同,则本机模块可能无法工作。