将node_modules保留在开发中的源代码树之外(不是生产)

avd*_*vdd 6 node.js npm gruntjs

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

npm和grunt使这很难:npm永远不会允许移动本地node_modules,所以我必须使用--global--prefix.但显然,咕噜不支持这样的计划.

鉴于上述限制,我如何实现目标?

所以,如果我有一个项目:

foo/
    .git/
    src/
    gruntfile.js
    package.json
Run Code Online (Sandbox Code Playgroud)

我希望我的树中没有额外的文件,特别是node_modules.(也bower_componentsbuild等,但这个是关于NPM).此目录应保持不变,而我的工作,并运行它.就这些.

显然npm link应该这样做,但是当我尝试它时仍然安装了所有依赖项./node_modules.任何其他我无法理解的调用; 文档不清楚.

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

到目前为止,我最接近的是链接到例如~/.cache/foo/node_modules我的项目.虽然它实现了将deps从我的树中取出,但我仍然将这个链接弄乱了我的工作区.

我想知道是否有更好的方法.会的某种组合npm install,npm link,ln,~/.cache,NODE_PATHPWD让我跑我的项目,从我的源代码树,并保持干净所有的非源的文物?

fir*_*oit 5

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

可以(并且应该)做的是添加node_modules/到您的.gitignore(或者您给定的源控制系统的任何忽略文件),因此您不会对这些文件进行版本控制.

此外,还可以使用目录喜欢src/从强制性配置文件(组织代码和"避难所"它package.json,Gruntfile.coffee等).

  • 我想更多的证据节点人们只是不明白。 (4认同)
  • 所以"标准"是混合源文件和构建文物?这是基于推理还是惯性的"标准"?你能解释为什么这是个坏主意吗?在我看来,更好的想法是不要在我的工作空间中使用垃圾,并将可缓存的文物集中在其他地方.为此我有〜/ .cache. (3认同)
  • 该死,我猜他把我们都放在了自己的位置上。 (2认同)
  • 问题是 npm(不是 Node!)是我遇到的第一个完全拒绝提供这种便利的工具。也许您可以为前端开发建议一个不同的工具链,并具有一定程度的功能/插件对等性? (2认同)
  • 我不认为 OP 的意图是违反标准,而是遵循相当完善的最佳实践(树外构建)。 (2认同)