大多数 Atlaskit 编辑器都获得 MIT 或 Apache 2.0 许可。我试图弄清楚应该如何使用 Atlaskit,而不接受用于包的非免费(如自由)Atlassian 设计指南许可证(ADG 许可证),它是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
从 npmjs.com 获得 ADG 许可的默认值?
分叉整个 Atlaskit 包树只是为了修改依赖项以覆盖这 3 个包显然是可能的,但有更好的方法吗?似乎npm-force-resolutions可以做这样的事情,但据我所知,它只允许替换依赖版本号,所以我可以简单地选择我想要使用的官方实现,@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
指向我分叉的另一个包。在这整个被替换树的叶子上将是 a package.json
,它指向 和 的自由变@atlaskit/icon
体。@atlaskit/icon-file-type
@atlaskit/icon-object
如果不分叉和修改整个树中的依赖关系,真的没有办法解决这个问题吗?