从另一个文件夹访问node_modules

时间:2016-04-08 04:46:29

标签: node.js npm gulp

最近开始与Gulp合作,我无法弄清楚是否真的有必要在当前项目的文件夹中直接使用node_modules的副本? 例如。我有这个结构:

mysite的
└─builder
└──node_modules
└─work
└─work2

如何从文件夹'work'或'work2'访问文件夹'builder'中的node_modules而不复制它?它非常大,大约100mb,在我看来,每个新项目都没有它的副本是没有意义的。

我在文件package.json中尝试过此行export NODE_PATH='D:\OpenServer\domains\mysite\build',然后尝试了命令gulp,但它回复了[10:24:27] Local gulp not found in d:\OpenServer\domains\mysite\work [10:24:27] Try running: npm install gulp

4 个答案:

答案 0 :(得分:3)

简短回答

不要这样做。让NPM以其设计的方式工作。但是,为了节省空间,您可以删除当前处于休眠状态的项目上的node_modules文件夹,并在切换回L.circle([50.5, 30.5], 200).addTo(map); 时单击npm install重新创建它。

<强>理由

即使你共享你的node_modules,你也可能会有冗余。接下来你会对他们做些什么?

每个项目复制模块是NPM的核心。如果深入了解node_modules文件夹树,您可能会注意到它甚至可以在一个给定的依赖关系树下包含多个相同库的复制。假设您明确地请求了两个模块,并且这两个模块本身都提取了一个依赖关系来处理很多事情,因此被称为lib_DADDYMUMMY

node_modules
    + a_module_you_use v0.5
        + lib_DADDYMUMMY v0.1 (pulled as a dependency of this module)
    + another_module_that_you_requested v0.3
        + lib_DADDYMUMMY v0.1 (again ! pulled as a dependency of this other module)

当您的两个模块开始需要不同版本的lib_DADDYMUMMY时,这会派上用场。当您维护长寿项目时,这会派上用场!并且他知道在JavaScript世界中,通过快速变化的API,您可以将大多数任何体面项目视为长期存在。 :)

可以想象所有的依赖关系都是由每个人共享的,生活在一个扁平的结构中,有几个版本的图书馆彼此相邻,每个人都在那里找到他需要的东西。可以调用该存储库,比如.m2。但不幸的是,这不是NPM的工作方式。

NPM认为存储空间便宜。这是帮助您管理依赖项版本,依赖项依赖项以及依赖项依赖项依赖项的价格。我认为,workwork2当他们的生活继续,采取不同的维护路径时,处理肮脏的工作是一个实惠的价格。我不会试图通过强制一个类似Maven的半文件夹模型来阻止它。

答案 1 :(得分:1)

也许你应该将你的package.json放入你的根目录(mysite / package.json),
然后尝试在根目录上安装node_modules 另外,你在同一个目录上写gulpfile。

例如

mysite  
|- package.json  
|- node_modules  
|- gulpfile.js  
└─builder  
└─work  
└─work2

但是,我建议您为每个项目编写一个gulp文件。

答案 2 :(得分:0)

node_modules文件夹粘贴到mySite目录中。

npm packages等所有gulp都适用于您的workwork2目录。

但是,现在(您的文件夹结构)工作文件夹在其父目录中找不到node_modules

答案 3 :(得分:-1)

为什么不应该这样做的一个问题是版本控制。如果您的模块需要相同软件包的不同版本,那么您将遇到问题。一个包将赢,它可能打破另一个包。

此外,您遇到了必须以某种方式合并依赖项列表的问题 - 这意味着,您必须从work/package.jsonwork2/package.json等获取依赖项,然后一次安装所有这些。

合并node_modules/也无法解决您的问题 - 相信我,不要尝试。