【问题标题】:Version of dependency vs. version of dependency of dependency依赖的版本与依赖的依赖版本
【发布时间】:2019-12-25 02:18:48
【问题描述】:

假设我在package.json 中有依赖项X 1.0 版和依赖项Y 1.0 版。如果Y 需要X 2.0 版(我知道是因为我查看了package-lock.json),我仍然可以在我的代码中使用X 1.0 版而不会出现问题吗?

【问题讨论】:

    标签: node.js typescript package


    【解决方案1】:

    通过几个关于良好模块行为的假设,在同一个应用中使用两个不同版本的模块是完全可行的。

    为了实现这一点,“良好行为”模块必须执行以下一些操作:

    1. 不使用会在版本之间发生冲突的全局符号(仅限导出)。如果一切都是通过模块导出完成的,那么同一个模块的两个版本可以正常运行。每一个都将单独导入,代码将仅使用来自相应版本的导入。
    2. 将两个版本安装在不同的目录或使用不同的名称。这里的想法是模块的路径在两者之间必须不同,因为这就是模块缓存的工作方式。如果完整的文件名不同(因为不同的安装路径或不同的文件名),那么模块加载器会很高兴地分别加载每个文件。
    3. 不要在全局范围内注册任何会冲突的东西(比如不是两者都尝试在同一个端口上启动服务器)。
    4. 不要尝试将数据写入同一个文件。如果所有文件活动都与模块的安装目录相关,那么这应该是安全的。但是,如果模块假设某个已知路径或两者都使用来自相同环境变量的路径,并且它们最终在将数据写入同一文件时发生冲突,则可能会导致问题。
    5. 不要尝试将冲突的属性名称写入同一个对象。例如,如果两个版本都作为 Express 中间件运行,并且都试图将不同的内容写入 req.someProp 属性,这可能会导致问题。但是,如果两个版本都没有用于相同的请求,或者两个版本都用于不同的功能,那么这可以正常工作。

    我仍然可以在我的代码中使用 X 1.0 版吗?

    所以,这当然是可能的,但这取决于模块的行为以及它在全局或共享资源中的确切作用。

    【讨论】:

      猜你喜欢
      • 2016-09-18
      • 2015-10-13
      • 2020-07-26
      • 2019-01-24
      • 2017-08-21
      • 1970-01-01
      • 2019-07-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多