大多数Atlaskit编辑器都获得了MIT或Apache2.0许可证的许可。我正在试图弄清楚,在不接受非自由(自由中的)亚特兰蒂斯设计指南许可证(ADG许可)的情况下,如何使用Atlaskit ( Atlaskit ),后者用于包@atlaskit/icon、@atlaskit/icon-file-type和@atlaskit/icon-object,这些包是亚特拉斯基特编辑器深嵌套依赖关系的一部分。
我完全意识到,我需要重新创建替代图标和主题,我对此没有意见。但是,当我创建package.json并运行npm install时,当我包括以下依赖项时,我得到了上述ADG许可包:
...
"dependencies": {
"@atlaskit/editor-core": "^120",
"@atlaskit/media-core": "^31",
"@atlaskit/smart-card": "^13",
...如何通过我自己的实现来使用(例如,从@atlaskit/icon?代替ADG许可的默认)?
要修改依赖项来覆盖这3个包显然是可能的,但是有更好的方法吗?国家预防机制-武力-决议似乎可以这样做,但据我所知,它只允许替换依赖版本号,这样我就可以简单地选择我想要使用的@atlaskit/icon的官方实现,但这不允许更改为完全不同的实现。所有版本的@atlaskit/icon都有相同的许可证,我试图这样做,因为我不喜欢ADG,而且我愿意重新实现所需的部分。
我更喜欢可以保存在主级别package.json (或它旁边的一个文件)中的东西,在这里我需要其他atlaskit依赖项。我正在使用节点v12,以防它产生影响。我不需要支持任何较小的版本,但我也希望与v14兼容。
更新:给定上面的依赖项,npm list "@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而不替换my-atlaskit-editor和@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这是许多要重写的包,只是为了更改嵌套包中的dependencies。实际上,我需要对所有这些包进行分叉,并更改每个嵌套包的dependencies,以引用我的分叉版本,该版本再次修改了dependencies,指向我分叉的另一个包。在这棵被替换的树的叶子上将有一个package.json,它指向@atlaskit/icon、@atlaskit/icon-file-type和@atlaskit/icon-object的自由变体。
在不对整个树中的依赖进行分叉和修改的情况下,真的没有办法修复这种混乱吗?
发布于 2020-10-06 12:22:56
因此,在您的情况下,您可以采取以下方法:
"dependencies": {
"@atlaskit/editor-core": "npm:another-editor-core@^1.0",
"@atlaskit/media-core": "npm:another-media-core@^1.0",
"@atlaskit/smart-card": "npm:another-smart-card@^1.0"
}这将产生安装another-editor-core@^1.0而不是@atlaskit/editor-core的效果。然后,当您的代码试图要求@atlaskit/editor-core时,将需要another-editor-core:
const editor = require("@atlaskit/editor-core") // this is actually another-editor-core一种简单的管理方法是在国家预防机制中创建一个组织,这样您就可以拥有像@my-org-name/editor-core这样的作用域包。
编辑:
正如注释中所指出的,上面的解决方案不支持传递依赖,而只支持直接依赖。
这似乎是目前不支持的国家预防机制,甚至使用npm-force-resolutions。经过一段时间的研究,我找不到任何其他工具,使之与npm一起工作。
然而,这是由纱线使用选择性依赖决议支持的。
"resolutions": {
"@atlaskit/editor-core": "npm:another-editor-core@^1.0",
"@atlaskit/media-core": "npm:another-media-core@^1.0",
"@atlaskit/smart-card": "npm:another-smart-card@^1.0"
}因此,我看到你们向前迈进的三种选择:
npm-force-resolutions一样祝好运!
发布于 2020-10-08 21:15:36
另一种选择是使用@atlaskit包作为基础创建一个私有NPM包,然后用您自己的包替换依赖项。有关创建包描述的详细信息,请参阅https://docs.npmjs.com/files/package.json,以及发布私有包的https://docs.npmjs.com/creating-and-publishing-private-packages。您可能需要考虑使用一个工具来自动化更新过程,以提取最新的@atlaskit包,并创建和发布您的备选方案。
https://stackoverflow.com/questions/64121161
复制相似问题