如何在具有受限Internet访问的环境中使用npm

时间:2013-12-12 16:02:23

标签: node.js security npm

在每个用户都无法访问的受限环境中,我希望能够尽可能离线使用npm。

我的想法是将全局配置指向共享缓存目录,以便高级用户可以进行安装,并且依赖关系将最终进入缓存目录。然后,其他用户可以对以前在缓存中的任何内容进行npm离线安装。

所以2个问题:

这会有用吗? 没有设置我自己的本地npm存储库是否有更简单的方法?

4 个答案:

答案 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"
}