繁体   English   中英

从另一个文件夹访问node_modules

[英]Access node_modules from another folder

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

我的网站
└─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

简短的回答

不要这样做。 让NPM以其设计的方式工作。 但是,为了节省空间,您可以删除当前处于休眠状态的项目上的node_modules文件夹,并在切换回它们时使用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的文件夹模型来阻止它。

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

例如。

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

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

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

所有npm packages ,如gulp会在你的工作, workwork2目录。

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

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

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

合并node_modules/也不会解决你的问题 - 相信我,不要试试。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM