Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 如何在不接受Atlassian Design Guidelines许可证的情况下使用npm包的替代实现来使用Atlaskit_Node.js_Overriding_Npm Install_Dependency Management_Atlaskit - Fatal编程技术网

Node.js 如何在不接受Atlassian Design Guidelines许可证的情况下使用npm包的替代实现来使用Atlaskit

Node.js 如何在不接受Atlassian Design Guidelines许可证的情况下使用npm包的替代实现来使用Atlaskit,node.js,overriding,npm-install,dependency-management,atlaskit,Node.js,Overriding,Npm Install,Dependency Management,Atlaskit,大多数Atlaskit编辑器都获得了MIT或Apache 2.0许可证。我正在试图弄清楚,在不接受用于软件包的非免费(如自由)Atlassian设计指南许可证(ADG许可证)的情况下,Atlaskit应该如何使用,@atlaskit/icon文件类型和@atlaskit/icon对象,它们是atlaskit编辑器的深度嵌套依赖项的一部分 我完全意识到我需要重新创建替代图标和主题,对此我没有意见。但是,当我创建package.json并运行npm install时,当我包含以下依赖项时,我会获得上

大多数Atlaskit编辑器都获得了MIT或Apache 2.0许可证。我正在试图弄清楚,在不接受用于软件包的非免费(如自由)Atlassian设计指南许可证(ADG许可证)的情况下,Atlaskit应该如何使用,
@atlaskit/icon文件类型
@atlaskit/icon对象
,它们是atlaskit编辑器的深度嵌套依赖项的一部分

我完全意识到我需要重新创建替代图标和主题,对此我没有意见。但是,当我创建
package.json
并运行
npm install
时,当我包含以下依赖项时,我会获得上述ADG许可包:

...
"dependencies": {
    "@atlaskit/editor-core": "^120",
    "@atlaskit/media-core": "^31",
    "@atlaskit/smart-card": "^13",
    ...
我如何通过npmjs.com传递我自己的实现以供使用,例如代替ADG许可的默认
@atlaskit/icon

分叉整个Atlaskit包树以修改依赖项以覆盖这3个包显然是可能的,但是有更好的方法吗?似乎可以这样做,但据我所知,它只允许替换依赖项版本号,以便我可以简单地选择我要使用的官方实现,例如
@atlaskit/icon
,但这不允许更改为完全不同的实现。所有版本的
@atlaskit/icon
都有相同的许可证,我之所以这么做是因为我不喜欢ADG许可证,我愿意重新实现所需的部分

我更喜欢可以保存在主级别
package.json
(或它旁边的文件)中的东西,在这里我需要其他
atlaskit
依赖项。我使用的是节点v12,以防它有所不同。我不需要支持任何较小的版本,但我也希望与v14兼容

更新:给定上述依赖项,
npm列表“@atlaskit/icon”
将发出

my-atlaskit-editor@0.0.1 /local/path/to/my/editor
├─┬ @atlaskit/editor-core@120.1.2
│ ├─┬ @atlaskit/calendar@9.2.10
│ │ └── @atlaskit/icon@20.1.2  deduped
│ ├─┬ @atlaskit/checkbox@10.1.14
│ │ └── @atlaskit/icon@20.1.2  deduped
│ ├─┬ @atlaskit/datetime-picker@9.4.7
│ │ ├─┬ @atlaskit/field-base@14.0.5
│ │ │ └── @atlaskit/icon@20.1.2  deduped
│ │ └── @atlaskit/icon@20.1.2  deduped
│ ├─┬ @atlaskit/droplist@10.0.8
│ │ └── @atlaskit/icon@20.1.2  deduped
│ ├─┬ @atlaskit/editor-common@44.1.0
│ │ ├── @atlaskit/icon@20.1.2  deduped
│ │ ├─┬ @atlaskit/media-picker@54.2.3
│ │ │ ├─┬ @atlaskit/flag@12.4.5
│ │ │ │ └── @atlaskit/icon@20.1.2  deduped
│ │ │ ├── @atlaskit/icon@20.1.2  deduped
│ │ │ └─┬ @atlaskit/media-card@68.0.2
│ │ │   └── @atlaskit/icon@20.1.2  deduped
│ │ └─┬ @atlaskit/profilecard@12.4.4
│ │   ├─┬ @atlaskit/avatar@18.0.2
│ │   │ └── @atlaskit/icon@20.1.2  deduped
│ │   └── @atlaskit/icon@20.1.2  deduped
│ ├─┬ @atlaskit/editor-markdown-transformer@3.1.25
│ │ └─┬ @atlaskit/editor-common@46.1.1
│ │   ├── @atlaskit/icon@20.1.2  deduped
│ │   ├─┬ @atlaskit/media-card@68.0.2
│ │   │ └── @atlaskit/icon@20.1.2  deduped
│ │   └─┬ @atlaskit/media-picker@54.2.3
│ │     ├─┬ @atlaskit/flag@12.4.5
│ │     │ └── @atlaskit/icon@20.1.2  deduped
│ │     └── @atlaskit/icon@20.1.2  deduped
│ ├─┬ @atlaskit/emoji@62.8.4
│ │ └── @atlaskit/icon@20.1.2  deduped
│ ├─┬ @atlaskit/form@7.4.1
│ │ └── @atlaskit/icon@20.1.2  deduped
│ ├── @atlaskit/icon@20.1.2 
│ ├─┬ @atlaskit/media-card@67.2.3
│ │ ├── @atlaskit/icon@20.1.2  deduped
│ │ └─┬ @atlaskit/media-viewer@44.4.4
│ │   └── @atlaskit/icon@20.1.2  deduped
│ ├─┬ @atlaskit/media-editor@37.0.12
│ │ ├── @atlaskit/icon@20.1.2  deduped
│ │ └─┬ @atlaskit/media-card@68.0.2
│ │   └── @atlaskit/icon@20.1.2  deduped
│ ├─┬ @atlaskit/media-filmstrip@38.0.4
│ │ ├── @atlaskit/icon@20.1.2  deduped
│ │ └─┬ @atlaskit/media-card@68.0.2
│ │   └── @atlaskit/icon@20.1.2  deduped
│ ├─┬ @atlaskit/media-picker@54.2.3
│ │ ├─┬ @atlaskit/flag@12.4.5
│ │ │ └── @atlaskit/icon@20.1.2  deduped
│ │ ├── @atlaskit/icon@20.1.2  deduped
│ │ └─┬ @atlaskit/media-card@68.0.2
│ │   └── @atlaskit/icon@20.1.2  deduped
│ ├─┬ @atlaskit/mention@18.18.3
│ │ ├─┬ @atlaskit/avatar@18.0.2
│ │ │ └── @atlaskit/icon@20.1.2  deduped
│ │ └── @atlaskit/icon@20.1.2  deduped
│ ├─┬ @atlaskit/modal-dialog@10.6.4
│ │ └── @atlaskit/icon@20.1.2  deduped
│ ├─┬ @atlaskit/radio@3.2.3
│ │ └── @atlaskit/icon@20.1.2  deduped
│ ├─┬ @atlaskit/select@11.0.14
│ │ └── @atlaskit/icon@20.1.2  deduped
│ ├─┬ @atlaskit/status@0.9.25
│ │ └── @atlaskit/icon@20.1.2  deduped
│ └─┬ @atlaskit/task-decision@16.1.2
│   └── @atlaskit/icon@20.1.2  deduped
├─┬ @atlaskit/media-picker@54.2.3
│ ├─┬ @atlaskit/dropdown-menu@9.0.6
│ │ └── @atlaskit/icon@20.1.2  deduped
│ ├─┬ @atlaskit/flag@12.4.5
│ │ └── @atlaskit/icon@20.1.2  deduped
│ ├── @atlaskit/icon@20.1.2  deduped
│ ├─┬ @atlaskit/media-card@68.0.2
│ │ └── @atlaskit/icon@20.1.2  deduped
│ └─┬ @atlaskit/media-ui@12.5.1
│   ├─┬ @atlaskit/avatar@18.0.2
│   │ └── @atlaskit/icon@20.1.2  deduped
│   └── @atlaskit/icon@20.1.2  deduped
└─┬ @atlaskit/smart-card@13.5.1
  └── @atlaskit/icon@20.1.2  deduped
是否可以只替换包
@atlaskit/icon
,而不替换
我的atlaskit编辑器
@atlaskit/icon
之间树中的所有包。在本例中,它将是以下列表:

@atlaskit/avatar
@atlaskit/calendar
@atlaskit/checkbox
@atlaskit/datetime-picker
@atlaskit/dropdown-menu
@atlaskit/droplist
@atlaskit/editor-common
@atlaskit/editor-core
@atlaskit/editor-markdown-transformer
@atlaskit/emoji
@atlaskit/field-base
@atlaskit/flag
@atlaskit/form
@atlaskit/media-card
@atlaskit/media-editor
@atlaskit/media-filmstrip
@atlaskit/media-picker
@atlaskit/media-ui
@atlaskit/media-viewer
@atlaskit/mention
@atlaskit/modal-dialog
@atlaskit/profilecard
@atlaskit/radio
@atlaskit/select
@atlaskit/smart-card
@atlaskit/status
@atlaskit/task-decision
为了改变嵌套包中的
依赖项
,需要覆盖很多包。实际上,我需要对所有这些包进行分叉,并更改每个嵌套包的
依赖项
,以引用我的分叉版本,该版本再次只修改了指向我分叉的另一个包的
依赖项
。在整个替换树的叶子上是一个
包.json
,它指向
@atlaskit/icon
@atlaskit/icon文件类型
@atlaskit/icon对象
的免费变体

如果不在整个树中分叉和修改依赖项,真的没有办法修复这个混乱吗?

NPM

因此,在您的情况下,您可以采取以下方法:

“依赖项”:{
“@atlaskit/editor core”:“npm:另一个编辑器核心@^1.0”,
“@atlaskit/media core”:“npm:另一个media core@^1.0”,
“@atlaskit/智能卡”:“npm:另一个智能卡@^1.0”
}
这将产生安装另一个编辑器核心^1.0而不是
@atlaskit/editor core
的效果。然后,当您的代码试图要求
@atlaskit/editor core
时,将需要另一个编辑器core:

const editor=require(@atlaskit/editor core”)//这实际上是另一个编辑器核心
管理它的一个简单方法是,这样您就可以拥有像
@my-org-name/editor-core

编辑: 正如注释中所指出的,上面的解决方案不支持可传递依赖项,而只支持直接依赖项

npm目前似乎不支持这一点,即使使用
npm强制分辨率
。经过一点研究,我找不到任何其他的工具,使它与npm的工作

然而,这是由以下纱线支持的:

“决议”:{
“@atlaskit/editor core”:“npm:另一个编辑器核心@^1.0”,
“@atlaskit/media core”:“npm:另一个media core@^1.0”,
“@atlaskit/智能卡”:“npm:另一个智能卡@^1.0”
}
因此,我认为有3个选项可供您选择:

  • 迁移到Thread(如果您的项目允许)
  • 编写一个脚本,解析package-lock.json以覆盖已解析的包。这其实不应该那么难。该脚本可以作为预安装步骤运行,就像
    npm force resolutions
  • 在上请求此功能,如果熟悉clojure且时间允许,您自己可能会参与回购

  • 祝你好运

    另一种方法是使用@atlaskit包作为基础创建一个私有NPM包,然后用您自己的包替换依赖项。 有关创建包说明和发布专用包的详细信息,请参见。
    您可能想考虑使用一个工具来自动化更新过程以拉动最新的@ ATLASKIT包,并创建和发布您的备选方案。

    是的,这解释了如何重写TopPrEVER包。但是,对于Atlaskit编辑器代码,问题在于依赖关系树中的嵌套包。如何覆盖那些嵌套的依赖项而不必遍历整个树?有关详细信息,请参阅问题中的更新。根据这一点,npm别名系统不支持“可传递依赖项”,因为当您的依赖项本身具有依赖项时,npm别名系统称之为“可传递依赖项”。您是对的。我编辑了我的答案,添加了我可以看到的处理可传递依赖项的3个选项。当然,正如您在问题描述中指出的那样,也可以选择fork atlaskit。我想我会尝试将整个项目迁移到Thread。这似乎不是很容易的解决方案,但从长远来看可能更容易。这将需要替换整个树,因为一些包