Node.js 在开发(非生产)过程中,将节点_模块保持在源代码树之外

Node.js 在开发(非生产)过程中,将节点_模块保持在源代码树之外,node.js,gruntjs,npm,Node.js,Gruntjs,Npm,在我处理源代码树时,我更喜欢将所有生成的文件和依赖项保留在源代码树之外 npm和grunt让这变得很困难:npm永远不允许移动本地节点模块,所以我必须使用--global和--prefix。但格兰特显然不支持这样的计划 在上述限制条件下,我如何实现我的目标 因此,如果我有一个项目: foo/ .git/ src/ gruntfile.js package.json 我不希望在我的树中有额外的文件,特别是节点模块。(还有bower\u组件和build等,但这是关于

在我处理源代码树时,我更喜欢将所有生成的文件和依赖项保留在源代码树之外

npm和grunt让这变得很困难:npm永远不允许移动本地节点模块,所以我必须使用
--global
--prefix
。但格兰特显然不支持这样的计划

在上述限制条件下,我如何实现我的目标

因此,如果我有一个项目:

foo/
    .git/
    src/
    gruntfile.js
    package.json
我不希望在我的树中有额外的文件,特别是节点模块。(还有
bower\u组件
build
等,但这是关于npm的。)在我处理和运行该目录时,该目录应保持不变。仅此而已

显然,
npm-link
应该这样做,但是当我尝试时,它仍然在
/node\u模块中安装了所有依赖项。任何其他我无法理解的召唤;文件不清楚

一个相关的建议是使用另一个带有符号链接到我的Grunfile或package.json的目录,但是grunt刚刚解析了符号链接并继续在我的原始目录中工作

到目前为止,我最接近的是从我的项目中链接到例如
~/.cache/foo/node_模块
。虽然它实现了将DEP从我的树中排除,但我的工作区中仍然有这个链接


我想知道是否有更好的办法。
npm安装
npm链接
ln
~/.cache
节点路径
PWD
的组合是否允许我从源代码树运行我的项目,并保持它没有任何非源代码的人工制品?

违反标准是一个非常糟糕的想法®

可以(并且应该)做的是将
节点\ u模块/
添加到
.gitignore
(或者您为给定的源代码管理系统提供的任何忽略文件)中,这样您就不会对这些文件进行版本设置


此外,您还可以使用类似于
src/
的目录来组织代码,并将其从强制配置文件(
package.json
Gruntfile.coffee
等)中“隐藏”出来;通常您的GrunFile(通常还有您的节点模块)将位于源代码树中,以使在不同环境中的工作更加一致。我发现这是不寻常的,但我很难理解为什么。我可以理解捆绑依赖项的节点方式的优势,但不明白为什么部署方案应该贯彻到我的开发环境中。原因是它确保您的用户/开发人员仍然可以使用或构建软件,即使一个节点模块消失或中断了所需的功能。你似乎在回答一个不同的问题。好吧,说清楚一点,我不是100%确定你的问题有多窄。出于许多原因,您希望在项目目录结构中包含节点模块。除此之外,您可能需要相同工具的不同版本来支持不同的项目。这并不罕见;这实际上是一个主要原因,规范是将文件放在源代码树中,而不是进行全局安装。在某种程度上,你也在问关于将这些工具提交到源代码管理的问题,这也是一种非常常见的做法,以确保使用它们的项目代码可以使用这些工具的正确版本。所以“标准”是混合源文件和构建人工制品?这是基于推理还是惯性的“标准”?你能解释一下为什么这是个坏主意吗?在我看来,最好不要在我的工作空间里乱放垃圾,而把可收藏的艺术品集中在其他地方。我有~/.cache用于此目的。@avdd您不能混合它们;您可以将它们分隔到适当的目录中
/src
包含源代码,
/test
包含单元和其他测试,
/build
(或类似)包含构建版本,
/node\u模块
包含构建和测试所需的节点模块,依此类推。有很多关于如何组织的理论,但人们普遍认为gruntfiles不仅仅是“构建工件”。如果gruntfiles对您的开发过程至关重要,“它”不是操作系统,它与项目的其他部分属于同一文件夹层次结构中的某个位置。我想更多的人可能不明白。该死,我想他把我们都放在了自己的位置上。问题是npm(不是node!)是我遇到的第一个完全拒绝做出这种调整的工具。也许你可以为前端开发推荐一个不同的工具链,它具有一定程度的功能/插件对等性?