Node.js 在开发(非生产)过程中,将节点_模块保持在源代码树之外
在我处理源代码树时,我更喜欢将所有生成的文件和依赖项保留在源代码树之外 npm和grunt让这变得很困难:npm永远不允许移动本地节点模块,所以我必须使用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等,但这是关于
--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!)是我遇到的第一个完全拒绝做出这种调整的工具。也许你可以为前端开发推荐一个不同的工具链,它具有一定程度的功能/插件对等性?