编者按:问题的原始标题是"使用npm install安装存储在本地目录中的节点模块"希望透明地重新定义安装源不那么明显。因此,一些现有的答案提出了基于修改安装过程的解决方案。
我知道这是一件很简单的事情,但我对这个领域的任何事情都很陌生,所以在搜索周围并不断寻找不是我想要的答案之后,我认为我只是直接问。
我目前有一个在目录FOO中运行的进程,该进程调用npm install。目录FOO包含一个package.json和一个npm-shrinkwrap.json文件来指定模块(在这种情况下为bluebird,extend和mysql,但它并不重要)和版本。这一切都很好。
但是现在不是通过互联网获取模块,而是希望将它们存储在本地目录BAR中,并让foo中的进程使用npm从那里安装它们。我无法将它们永久存储在FOO中,但我可以在BAR中出于我无法控制的原因。我知道这相对简单,但我似乎无法获得正确的命令集。谢谢你的帮助。
答案 0 :(得分:2)
注意:此答案最初建议仅重新定义缓存位置。虽然这在原则上有效,但npm
仍尝试联系每个包的网络,导致过度延迟。
我认为你的意图是透明地更改安装源:换句话说:你不想改变你的包,你只想打电话给{{ 1}}和以前一样,但是要从自定义文件系统位置安装软件包,离线(无需Internet连接)。
这个难题有两个部分:
重新定义npm install
的缓存文件系统位置(缓存以前下载的软件包)以指向您的自定义位置:
请注意,缓存包以特定方式存储:npm
文件存储在子文件夹package.json
中,压缩包作为整体存储为package
。最简单的方法是将软件包从现有缓存复制到您的自定义位置,或者只是在您有Internet连接时安装额外需要的软件包,然后自动缓存它们。
对于透明使用(package.tgz
可以照常调用):
npm install
npm config set cache '/path/to/BAR'
操作生效。npm
export npm_config_cache='/path/to/BAR'
npm_config_cache='path/to/BAR' npm install
强制npm install --cache /path/to/BAR
使用缓存包:
npm
配置项进行解决方法。
cache-min
切换功能多年来一直是功能请求 - 请参阅https://github.com/npm/npm/issues/2568 --offline
设置为一个非常高的值,以便缓存中的所有包都被认为是新鲜的并从那里提供:
cache-min
可以像往常一样调用):
npm install
npm config set cache-min 9999999999
操作生效。npm
export npm_config_cache_min=9999999999
npm_config_cache_min=9999999999 npm install
假设您已全局或通过环境变量设置npm install --cache-min 9999999999
,
现在,运行cache-min
应该直接从自定义缓存位置提供包。
警告:
这假定所有个包,您的npm install
需求在您的自定义位置可用;如果没有Internet连接,尝试安装不在缓存中的软件包显然会失败。
相反,如果您确实可以访问Internet,但希望阻止 npm install
使用它来获取程序包 - 如果在程序包中找不到程序包,它仍会尝试cache - 您必须将npm
配置项更改为无效的内容,以强制联机安装尝试失败; e.g:
registry
export npm_config_registry=http://example.org
尝试连接时出现延迟;虽然您可以将值设置为语法无效(例如,npm
),但none
会在每次使用时发出警告。示例npm
脚本:
bash
答案 1 :(得分:1)
您可能想尝试npm link
。你可以:
npm link
npm link mycrazydependency
醇>
答案 2 :(得分:0)
如果存在收缩包装文件,则忽略package.json
。您需要做的是使用像sed ...
这样的查找和替换操作来更改要检索的URL。但是,我不确定将file:///
语法的URL更改为有效,但请试一试。