我已经使用Node.js几年了,但仅限于小型自包含项目 .
我最近一直在研究如何创建包并将其包含('require')到更大的项目中 . 根据我的理解,这些包都是本地的(项目的一部分),或者是在NPM网站上发布/拉出的 .
但是如果我创建一个自包含的包并且不想将它发布到NPM,因为它包含专有代码,我无法看到我如何正确地创建,管理和发布(到内部服务器)这样的包 .
我在过去的十年中使用过Java和Maven,这个堆栈对我来说非常好用 . 您将模块/库包装到JAR文件中,然后将它们发布到本地服务器(即:Artifactory,Nexus或其他) . 当DEV“需要”依赖/包时,它将搜索我们的本地存储库管理器,如果在该级别找不到,则查看Maven中央存储库(在Internet上) . 工作得非常好 .
我们如何使用Node.js包NPM进行相同的操作?我搜索过,但发现那里的信息非常有限 .
任何教程,文章或任何东西的链接将不胜感激 .
UPDATE: 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"
可能表示您可以从自己的服务器中提取包 . 我一定会试一试并报告 .
UPDATE: 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 https://repo-server.com/some/path/foo-bar
,只需输入 npm install --save foo-bar-1.2.3.4.tgz
. 下载哪个版本取决于您使用的环境(开发,测试,阶段或产品) . 或者您甚至可以在URL中强制使用版本号(您的存储库服务器应该支持各种API调用) .
通过安装私有包,NPM应自动下载并安装所有依赖项 . 我说“应该”因为我没有证实这一点 .
2 回答
也许您可以做的是在GitHub上发布它,在
package.json
中你可以直接从存储库中调用这样的东西:要么
您也可以指定发行版,以防您的存储库有一个,例如:
你可以用你的包创建一个私人存储库,这样就安全了!
Private repository:
如果您想要托管您的私有软件包,并将代理请求代理到
npmjs.org
,您可以使用以下任一方式:Verdaccio
Nexus Repository Manager OSS 3.x
Nexus OSS 3.x具有成为通用存储库的优势(即支持npm,maven等) .
Self-contained packages:
正如您已经提到的那样
npm pack
生成tarball,它可以直接作为依赖项包含在其他包中 . 但您也可以使用bundledPropertiespackage.json
创建包含所有依赖项的tarball . 这样,在解压缩tarball时就不需要调用npm install
. 使用此方法的唯一警告是,如果开发和 生产环境 计算机具有不同的体系结构,则本机模块可能不起作用 .