更改node_modules文件夹的位置

9
我目前正在尝试将旧的ASP.NET WebSite项目迁移到Visual Studio 2015。我想使用NPM/Gulp自动编译LESS文件为CSS(这是在VS 2013中由WebEssentials完成的任务)。
我向项目添加了一个package.json文件以加载所需的组件。这将在WebSite项目的根目录下创建一个node_modules文件夹,这就是我的问题所在:
由于WebSite项目没有项目文件,因此在项目根文件夹中找到的所有文件(和子目录)都会自动成为项目的一部分。由于node_modules内部嵌套的目录结构过于深入,这导致了路径名过长而出现错误。
一个简单的解决方法是在node_modules文件夹上设置hidden属性(但这必须由每个开发人员手动完成)。
是否有一种方法可以告诉NPM将节点模块放入另一个目录中,例如项目上一级的..\node_modules中,该位置是解决方案文件所在的地方?
或者,是否可能从gulp-task中设置文件夹的隐藏属性(在加载项目时运行)?

你可以换个角度来解决这个问题。在不同的位置创建你的网站根目录,并使用gulp编译源代码并将其写入你的网站文件夹(即“public”)中,然后从你的解决方案目录运行npm/gulp,并让你的网站入口指向“public”文件夹。 - Rik
@Rik:我不确定在ASP.NET WebSite项目中是否可能实现,但我会考虑一下。另外,如果可能的话,我宁愿不对那个旧项目进行太多更改。 - M4N
但是你正在某个地方添加npm文件。选择任何不在您的网站文件夹中的位置,并使用gulp.src().pipe(dostuff).gulp.dest(path/to/website/dir)从那里开始。 使用gulp.dest(),您可以将文件复制到任何位置。不需要进行任何结构更改。 - Rik
谢谢@Rik,那个方法可行。NPM/Gulp也可以在解决方案级别上添加(不仅仅是在项目级别)。 - M4N
2个回答

2
你可能想要查看npm 3.0+。它以最大的扁平结构安装模块。这应该可以减少模块目录中路径长度。

从发布说明中可以看到:

扁平化,扁平化,扁平化!

现在,您的依赖关系将被最大程度地扁平化。在可能的范围内,所有的依赖关系及其依赖关系和它们的依赖关系将被安装在项目的node_modules文件夹中,没有嵌套。只有当两个或多个模块存在冲突依赖关系时,您才会看到模块相互嵌套。

  • #3697 这将希望消除Windows用户最终出现过长路径的情况,以至于资源管理器和其他标准工具无法处理。
  • #6912 (#4761 #4037) 这也意味着,从一开始就会对您的安装进行去重。
  • #5827 这种去重甚至扩展到了Git依赖项。
  • #6936 (#5698) 现在各种命令都能进行去重。

这对其他命令的行为也有一些影响:

  • npm uninstall 现在会删除您指定的模块的任何依赖项,只要这些依赖项不是其他模块所需的。以前,它只会删除安装在该模块下的依赖项,如果您曾经进行了去重处理,则会留下残留垃圾。
  • npm ls 现在会根据需要对您的依赖关系树进行组织,而不是根据这些模块在磁盘上的位置。
  • #6937 npm dedupe 现在除了进行去重之外还会扁平化树形结构。

https://github.com/npm/npm/releases/tag/v3.0.0

如需升级Windows安装,请查看此软件包npm-windows-upgrade。


虽然此链接可能回答了问题,但最好包含答案的必要部分并提供链接以供参考。仅有链接的答案如果链接页面发生变化,则可能会失效。- 来自审核 - Ilija Dimov
对答案进行了更详细的补充 - Thomas Andersen

2

根据 @Rik 的答案,我成功解决了这个问题:

我没有将 package.jsongulpfile.js 添加到 WebSite 项目中,而是将它们添加到了解决方案级别(作为解决方案项)。这意味着,node_modules 文件夹现在位于解决方案目录中,与 WebSite 项目处于同一级别。

唯一的变化是相应地修改 gulpfile.js 中的路径。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接