我已经使用Node.js几年了,但只用于小型的独立项目。
最近,我一直在研究如何创建包并将其包含到更大的项目中(“需求”)。据我所知,这些软件包要么是本地的(项目的一部分),要么是在NPM网站上发布的。
但是,如果我创建了一个自包含的包,并且不想将它发布到NPM,因为它包含专有代码,那么我无法理解如何正确地创建、管理和发布(到内部服务器)这样的包。
在过去的十年中,我一直使用Java和Maven,这个堆栈对我来说非常好。您可以将模块/lib打包到JAR文件中,然后将它们发布到本地服务器(即Artifactory、Nexus或其他服务器)。当DEV“需要”一个依赖/包时,它会搜索我们的本地存储库管理器,如果没有在这个级别上找到,请查看Maven中央存储库(在internet上)。效果非常好。
我们将如何对Node.js +包+ NPM进行同样的处理?我已经搜索过了,但发现那里的信息非常有限。
任何链接到教程,文章或任何东西,将不胜感激。
更新: 2018.01.29 14:45
我发现这篇文献似乎表明你可以运行你自己的NPM注册中心!!我能办我自己的私人合唱团吗?
另外,我在“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 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即可。下载哪个版本将取决于您在哪个环境中工作(开发、测试、阶段或prod)。或者您甚至可以在URL中强制使用版本号(您的存储库服务器应该支持各种API调用)。
通过安装私有包,NPM应该自动下载和安装所有依赖项。我说“应该”,因为我还没有证实这一点。
发布于 2018-01-28 06:25:01
也许您能做的是在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"
}您可以使用您的包创建私有存储库,通过这种方式它是安全的!
发布于 2018-07-11 19:49:28
专用存储库:
如果您希望托管您的私有包(也是代理请求到npmjs.org ),您可以使用以下两种方法之一:
NexusOSS3.x的优点是它是一个通用的存储库(即支持npm、maven等)。
自给包:
正如您已经提到的,npm pack生成tarball,它可以直接包含在其他包的依赖项中。但是,您还可以使用bundledProperties of package.json创建包含所有依赖项的tarball。这样,您就不需要在提取tarball时调用npm install。使用此方法的唯一警告是,如果开发和生产机器具有不同的体系结构,则本机模块可能无法工作。
https://stackoverflow.com/questions/48483686
复制相似问题