在每个用户都无法访问的受限环境中,我希望能够尽可能离线使用npm。
我的想法是将全局配置指向共享缓存目录,以便高级用户可以进行安装,并且依赖关系将最终进入缓存目录。然后,其他用户可以对以前在缓存中的任何内容进行npm离线安装。
所以2个问题:
这会有用吗? 没有设置我自己的本地npm存储库是否有更简单的方法?
答案 0 :(得分:7)
每份文件:
npm install (with no args in a package dir)
npm install <tarball file>
npm install <tarball url>
npm install <folder>
npm install <name> [--save|--save-dev|--save-optional]
npm install <name>@<tag>
npm install <name>@<version>
npm install <name>@<version range>
npm i (with any of the previous argument usage)
因此,npm允许你这样做:
npm install /path/to/folder/containing/
node_modules
例如:npm install ~/Downloads/http-proxy
,前提是node_modules
文件夹位于http-proxy
内。
您可以在内部(可访问)服务器上设置存储库,并指示人们从那里以相同的名称下载。
答案 1 :(得分:2)
感谢您的回答。我最终做的是使用https://github.com/rlidwka/sinopia
这充当镜像存储库。我可以给这个过程互联网访问而不是其他用户。然后我为所有用户设置一个环境变量,将他们的npm存储库指向sinopia实例。
早期,但这似乎运作良好。
答案 2 :(得分:1)
r3mus是对的。但是,对于每个用户,它会导致一些认知开销和可能的管理问题。
更好的方法是拥有公司托管的npm存储库(如此处所述:http://clock.co.uk/tech-blogs/how-to-create-a-private-npmjs-repository),然后让用户通过npm set registry http://yourregistry.com
答案 3 :(得分:0)
对于构建服务器,一个合理的策略是将node_modules目录与已安装模块的现有目录进行符号链接。
e.g。我的powershell脚本可能会读到这样的内容
If (-Not (Test-Path node_modules))
{
& cmd /c mklink /d /j node_modules D:\npm-cache\node_modules
Write-Verbose "Symlinked node_modules"
}