【问题标题】:How import module dependencies from other npm dependency?如何从其他 npm 依赖项导入模块依赖项?
【发布时间】:2019-12-13 03:44:45
【问题描述】:

我有以下问题。目前我想构建一个具有这种预期行为的 NPM 模块:

一旦我安装了它,它的所有依赖项都会在项目中完美运行,只需导入它们。

首先,我拥有的是这样的:

我有“我的模块”项目作为我想要的特定版本的依赖模块。

另一方面,正如我们所见,我有一个导入它的项目。

在我的项目里面我想写,比如下面的代码,最后运行一下:

import {Calendar} from 'primereact/calendar';

我该如何解决这个问题?

提前致谢!

编辑:我项目的 package.json 是这样的

{
  "name": "my-project",
  "version": "0.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "dev": "next src",
    "build": "next build src",
    "start": "next start src"
  },
  "license": "ISC",
  "dependencies": {
    "next": "^9.0.3",
    "react": "^16.8.6",
    "react-dom": "^16.8.6",
    "@ascope/my-module": "file://../my-module"
  }
}

还有my-module的package.json:

{
  "name": "my-module",
  "version": "0.0.1",
  "main": "index.js",
  "scripts": {
    "test": "exit 1"
  },
  "license": "ISC",
  "bundledDependencies": [
    "primereact",
    "rxjs"
  ],
  "dependencies": {
    "primereact": "^3.1.8",
    "rxjs": "^6.5.2"
  },
  "peerDependencies": {
    "primereact": "^3.1.8",
    "rxjs": "^6.5.2"
  }
}

【问题讨论】:

    标签: javascript npm module dependencies


    【解决方案1】:

    这两个包都需要primereact 依赖项,当您对顶级包执行install 时,它将向上移动primereact 依赖项,假设有一个版本可以满足这两个依赖项。

    看看NPM install algorithm

    对于这个包{dep}结构:A{B,C}, B{C}, C{D},这个算法 产生:

    A
    +-- B
    +-- C
    +-- D
    

    也就是说,从 B 到 C 的依赖由 A 的事实来满足 已经导致 C 安装在更高级别。 D还在 安装在顶层,因为没有任何冲突。


    对于 A{B,C}、B{C,D@1}、C{D@2},此算法产生:

    A
    +-- B
    +-- C
       `-- D@2
    +-- D@1
    

    因为 B 的 D@1 将安装在顶层,所以 C 现在必须 为自己私下安装 D@2。这个算法是确定性的,但是 如果请求两个依赖项,则可能会生成不同的树 以不同的顺序安装。

    你也可以运行npm dedupe

    【讨论】:

    • 那么没有任何解决方案可以制作“版本的依赖管理器”包模块吗?
    • 如果你的意思是一种从顶级包管理依赖项的包依赖项的方法,那么没有。每个包都需要声明其依赖项,包管理器将为您管理依赖项的位置。因此,如果您的两个包都需要primereact,那么它们的package.json 中都需要primereact
    • 这个模块的唯一目的是管理依赖,以便以后只导入那个模块,不介意依赖
    • @mryuso92 没办法,你最好使用脚手架技术在项目中重用依赖项
    【解决方案2】:

    在 node.js 中,建议您将这些依赖项专门声明为应用程序的一部分。

    Require dependency of another dependency in node modules

    【讨论】:

    • 我尝试过的问题是应用程序缺少一些依赖项。例如,如果我导入 React 日历,生成器会给我一个关于“类名”导入的错误。无论如何谢谢:)
    猜你喜欢
    • 2013-04-17
    • 1970-01-01
    • 1970-01-01
    • 2013-08-26
    • 2016-02-18
    • 1970-01-01
    • 2019-12-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多