Node.js 指定package.json中节点_模块的路径

Node.js 指定package.json中节点_模块的路径,node.js,npm,Node.js,Npm,是否有一种方法可以将应用程序中的node_modules目录移动到/vendor/node_modules,就像bower处理bowerrc文件一样?我认为它可以在package.json中指定,但似乎找不到解决方案。非常感谢您的帮助。是的,您可以,只需设置NODE\u PATH env变量: export NODE_PATH='yourdir'/node_modules 根据该文件: 如果NODE_PATH环境变量设置为冒号分隔的列表 对于绝对路径,则节点将在这些路径中搜索模块,如果 它们在

是否有一种方法可以将应用程序中的node_modules目录移动到/vendor/node_modules,就像bower处理bowerrc文件一样?我认为它可以在package.json中指定,但似乎找不到解决方案。非常感谢您的帮助。

是的,您可以,只需设置NODE\u PATH env变量:

export NODE_PATH='yourdir'/node_modules
根据该文件:

如果NODE_PATH环境变量设置为冒号分隔的列表 对于绝对路径,则节点将在这些路径中搜索模块,如果 它们在别处找不到。(注意:在Windows上,节点路径为 由分号而不是冒号分隔。)

此外,节点将在以下位置进行搜索:

1:$HOME/.node_模块

2:$HOME/.node_库

3:$PREFIX/lib/node

其中,$HOME是用户的主目录,$PREFIX是节点的主目录 已配置节点前缀

这主要是出于历史原因我们非常鼓励您 将依赖项本地放置在节点模块文件夹中。它们将 加载速度更快,更可靠


简而言之:这是不可能的,而且似乎永远都不会得到支持(请参见此处)

在使用CLI或ENV变量(参见当前选择的答案)、.npmrc配置文件或
npm link
——它们都有共同点:它们绝不仅仅是特定于项目的,而是某种
全局解决方案

对我来说,这些解决方案中没有一个是真正干净的,因为您项目的贡献者总是需要创建一些特殊的配置或拥有一些特殊的知识-他们不能只
npm安装
,而且它可以工作


因此:要么你必须将package.json放在你想要安装节点模块的同一个目录中,要么你必须接受这样一个事实,即它们将始终位于项目的根目录中。

我不确定这是否是你想要的,但我最终还是问了这个问题,因为我无法在我的project dir中安装
node\u modules
,因为它安装在不支持符号链接的文件系统(一个VM“共享”文件夹)上

我发现了以下解决方法:

  • package.json
    文件复制到其他文件系统上的临时文件夹中
  • 在那里运行npm安装
  • 将生成的
    node\u modules
    目录复制回项目目录,使用
    cp-r--dereference
    将符号链接展开为副本
  • 我希望这能帮助其他人在寻找将
    node\u模块
    移动到不同文件系统的方法时解决这个问题

    其他选择 还有另一种解决方法,但这不适用于
    grunt
    ,因为它不支持
    NODE\u PATH
    ,如下所示:

    假设您已共享了
    /media/sf_
    ,并且无法在中安装符号链接 这意味着您实际上无法从安装npm
    /media/sf_shared/myproject
    ,因为某些模块使用符号链接

    • $mkdir/home/dan/myproject&&cd/home/dan/myproject
    • $ln-s/media/sf_shared/myproject/package.json
      (您可以在这个 方向,只是无法在/media/sf_共享中创建一个)
    • $npm安装
    • $cd/media/sf_shared/myproject
    • $NODE\u PATH=/home/dan/myproject/NODE\u模块NODE index.js

    纱线支持此功能:

    # .yarnrc file in project root
    --modules-folder /node_modules
    

    但您的体验可能会因您使用的软件包而异。我不确定你是否想进入那个兔子洞。

    我猜类似于我不确定你为什么接受了一个显然不能回答你问题的答案。你问如何在
    package.json
    中设置
    节点模块的路径,xShirase的回答根本没有提供这样做的方法。他可能接受了这个答案,因为这是一个非常明确的解决方案,而另一种解决方案比“抱歉,那是不可能的”要好。因此,在我的例子中,对于我正在构建的每个应用程序,我都有本地node_模块,我会在项目中的js文件中进行导出吗?不,它是一个环境变量,它是在系统级别设置的。因此,您必须在终端中键入它。env变量在
    进程的节点应用程序中访问。env
    我尝试在Windows中运行它,但它不起作用,它说:
    “导出”不被识别为内部或外部命令、可操作程序或批处理文件。
    ,我认为这不是问题的答案:他在package.json中请求一个属性来为本地(应用程序级)npm包设置路径。这个答案告诉他如何将全局(-g)安装的软件包移动到另一个文件夹中。“如果您想以不同的方式拼写“node_modules”,很抱歉,没有办法。这是内置在node core中的。更改它相当于构建一个完全不同的软件包管理器。”2019年的评论:看起来Thread支持覆盖模块目录。嗯,我想纱线是一个新的包装经理。