【问题标题】:How to share npm modules across projects?如何跨项目共享 npm 模块?
【发布时间】:2018-11-13 16:13:53
【问题描述】:

我使用的是 Windows 10 x64。 我正在使用 Dropbox 来保存我的所有项目,而在 Dropbox 文件夹中拥有一个“node_modules”文件夹是一场灾难。

首先,并非所有 npm 包都以允许 this method 的方式工作,因为正如第一行所说,“不以 '/'、'../' 或 './ 开头'",所以我认为这行不通。

所以,我尝试创建 syslink,但我发现,Windows 不允许为文件夹创建真正的硬链接,只能为文件创建。

我创建文件夹连接的方法是将这个 bat 文件放在每个项目文件夹中,并以管理员身份运行。

SET dest=%~dp0node_modules
SET src=F:\work\node_modules
MKLINK /J %dest% %src%

bat 文件有效,它创建了 syslink,但出现了 3 个问题。

  1. Dropbox 将其视为真实文件夹并开始同步。
  2. 该文件夹不会显示在选择性同步中以防止同步。
  3. npm 由于某种原因无法使用它,当我运行“npm install”时,它会创建一个新的真正的“node_modules”文件夹来替换 syslink,我得到以下错误输出:

【问题讨论】:

  • 我建议您转移到githubbitbucket 或任何其他版本控制系统。不要将 Dropbox、Google Drive 或任何其他云存储用于您的代码。
  • 你为什么还要使用dropboxNPM 可能是当今最好的工具之一(我个人的看法)。只需使用您的package.json 文件为每个项目安装 node_modules
  • @ZombieChowder 这正是我不想做的。我的许多项目都使用通用模块。
  • 不是很清楚最初的问题是什么。您是否尝试通过在项目之间共享模块来节省一些 Dropbox 空间?
  • @mihai 完全正确。

标签: node.js windows npm dropbox


【解决方案1】:

我不会尝试使用联结,它们很难使用,如果您不知道自己在做什么,可能会导致数据丢失。

相反,您可以采用以下方法。

创建一个包含模块路径的 json 配置文件:

{"modules_root": "F:/work/node_modules/"}

在您的代码中,加载此 json 并通过在配置文件中添加路径来要求您的模块:

var fs = require("fs");
var modules_root = JSON.parse(fs.readFileSync("modules_root.json")).modules_root;
var express = require(modules_root + "./express")

如果您决定使用本地模块,您只需将配置文件更改为:

{modules_root: "./node_modules/"}

【讨论】:

    猜你喜欢
    • 2021-08-03
    • 2012-10-31
    • 1970-01-01
    • 1970-01-01
    • 2012-09-19
    • 1970-01-01
    • 2022-08-08
    • 2017-06-15
    • 1970-01-01
    相关资源
    最近更新 更多