node.js - 如何在不接受 Atlassian 设计指南许可的情况下使用 npm 包的替代实现来使用 Atlaskit

标签 node.js overriding npm-install dependency-management atlaskit

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

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

...
"dependencies": {
    "@atlaskit/editor-core": "^120",
    "@atlaskit/media-core": "^31",
    "@atlaskit/smart-card": "^13",
    ...

我如何传递我自己的实现以供使用,例如而不是来自 npmjs.com 的 ADG 许可默认 @atlaskit/icon

fork 整个 Atlaskit 包树只是为了修改依赖项来覆盖这 3 个包显然是可能的,但有更好的方法吗?看来npm-force-resolutions可以做这样的事情,但据我所知,它只允许替换依赖版本号,所以我可以简单地选择例如的官方实现@atlaskit/icon 我想使用,但这不允许更改为完全不同的实现。所有版本的 @atlaskit/icon 都具有相同的许可证,我尝试这样做是因为我不喜欢 ADG 许可证,并且我愿意重新实现所需的部分。

我更喜欢可以在需要其他 atlaskit 依赖项的主级别 package.json (或其旁边的文件中)保存一些内容。我正在使用 Node v12,以防它产生影响。我不需要支持任何较低版本,但我也希望与 v14 兼容。

更新:给定上述依赖项,npm list "@atlaskit/icon" 将发出

<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="87eafeaae6f3ebe6f4eceef3aae2e3eef3e8f5c7b7a9b7a9b6" rel="noreferrer noopener nofollow">[email protected]</a> /local/path/to/my/editor
├─┬ @atlaskit/<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="c0a5a4a9b4afb2eda3afb2a580f1f2f0eef1eef2" rel="noreferrer noopener nofollow">[email protected]</a>
│ ├─┬ @atlaskit/<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="1172707d747f75706351283f233f2021" rel="noreferrer noopener nofollow">[email protected]</a>
│ │ └── @atlaskit/<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="aec7cdc1c0ee9c9e809f809c" rel="noreferrer noopener nofollow">[email protected]</a>  deduped
│ ├─┬ @atlaskit/<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="04676c61676f666b7c4435342a352a3530" rel="noreferrer noopener nofollow">[email protected]</a>
│ │ └── @atlaskit/<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="422b212d2c0270726c736c70" rel="noreferrer noopener nofollow">[email protected]</a>  deduped
│ ├─┬ @atlaskit/<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="305451445544595d551d4059535b554270091e041e07" rel="noreferrer noopener nofollow">[email protected]</a>
│ │ ├─┬ @atlaskit/<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="07616e626b632a6566746247363329372932" rel="noreferrer noopener nofollow">[email protected]</a>
│ │ │ └── @atlaskit/<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="f69f959998b6c4c6d8c7d8c4" rel="noreferrer noopener nofollow">[email protected]</a>  deduped
│ │ └── @atlaskit/<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="026b616d6c4230322c332c30" rel="noreferrer noopener nofollow">[email protected]</a>  deduped
│ ├─┬ @atlaskit/<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="b3d7c1dcc3dfdac0c7f382839d839d8b" rel="noreferrer noopener nofollow">[email protected]</a>
│ │ └── @atlaskit/<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="6009030f0e2052504e514e52" rel="noreferrer noopener nofollow">[email protected]</a>  deduped
│ ├─┬ @atlaskit/<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="2441404d504b5609474b49494b4a6410100a150a14" rel="noreferrer noopener nofollow">[email protected]</a>
│ │ ├── @atlaskit/<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="670e04080927555749564955" rel="noreferrer noopener nofollow">[email protected]</a>  deduped
│ │ ├─┬ @atlaskit/<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="8ee3ebeae7efa3fee7ede5ebfccebbbaa0bca0bd" rel="noreferrer noopener nofollow">[email protected]</a>
│ │ │ ├─┬ @atlaskit/<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="b3d5dfd2d4f382819d879d86" rel="noreferrer noopener nofollow">[email protected]</a>
│ │ │ │ └── @atlaskit/<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="dcb5bfb3b29ceeecf2edf2ee" rel="noreferrer noopener nofollow">[email protected]</a>  deduped
│ │ │ ├── @atlaskit/<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="86efe5e9e8c6b4b6a8b7a8b4" rel="noreferrer noopener nofollow">[email protected]</a>  deduped
│ │ │ └─┬ @atlaskit/<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="442921202d25692725362004727c6a746a76" rel="noreferrer noopener nofollow">[email protected]</a>
│ │ │   └── @atlaskit/<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="bbd2d8d4d5fb898b958a9589" rel="noreferrer noopener nofollow">[email protected]</a>  deduped
│ │ └─┬ @atlaskit/<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="aadad8c5ccc3c6cfc9cbd8ceea9b98849e849e" rel="noreferrer noopener nofollow">[email protected]</a>
│ │   ├─┬ @atlaskit/<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="7617001702170436474e58465844" rel="noreferrer noopener nofollow">[email protected]</a>
│ │   │ └── @atlaskit/<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="7c151f13123c4e4c524d524e" rel="noreferrer noopener nofollow">[email protected]</a>  deduped
│ │   └── @atlaskit/<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="177e74787957252739263925" rel="noreferrer noopener nofollow">[email protected]</a>  deduped
│ ├─┬ @atlaskit/<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="4326272a372c316e2e223128272c342d6e3731222d30252c312e263103706d726d7176" rel="noreferrer noopener nofollow">[email protected]</a>
│ │ └─┬ @atlaskit/<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="5237363b263d207f313d3f3f3d3c1266647c637c63" rel="noreferrer noopener nofollow">[email protected]</a>
│ │   ├── @atlaskit/<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="d4bdb7bbba94e6e4fae5fae6" rel="noreferrer noopener nofollow">[email protected]</a>  deduped
│ │   ├─┬ @atlaskit/<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="f8959d9c9199d59b998a9cb8cec0d6c8d6ca" rel="noreferrer noopener nofollow">[email protected]</a>
│ │   │ └── @atlaskit/<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="6d040e02032d5f5d435c435f" rel="noreferrer noopener nofollow">[email protected]</a>  deduped
│ │   └─┬ @atlaskit/<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="137e76777a723e637a707876615326273d213d20" rel="noreferrer noopener nofollow">[email protected]</a>
│ │     ├─┬ @atlaskit/<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="33555f52547302011d071d06" rel="noreferrer noopener nofollow">[email protected]</a>
│ │     │ └── @atlaskit/<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="345d575b5a7406041a051a06" rel="noreferrer noopener nofollow">[email protected]</a>  deduped
│ │     └── @atlaskit/<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="f69f959998b6c4c6d8c7d8c4" rel="noreferrer noopener nofollow">[email protected]</a>  deduped
│ ├─┬ @atlaskit/<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="c8ada5a7a2a188fefae6f0e6fc" rel="noreferrer noopener nofollow">[email protected]</a>
│ │ └── @atlaskit/<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="8ee7ede1e0cebcbea0bfa0bc" rel="noreferrer noopener nofollow">[email protected]</a>  deduped
│ ├─┬ @atlaskit/<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="96f0f9e4fbd6a1b8a2b8a7" rel="noreferrer noopener nofollow">[email protected]</a>
│ │ └── @atlaskit/<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="b6dfd5d9d8f6848698879884" rel="noreferrer noopener nofollow">[email protected]</a>  deduped
│ ├── @atlaskit/<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="39505a5657790b091708170b" rel="noreferrer noopener nofollow">[email protected]</a> 
│ ├─┬ @atlaskit/<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="92fff7f6fbf3bff1f3e0f6d2a4a5bca0bca1" rel="noreferrer noopener nofollow">[email protected]</a>
│ │ ├── @atlaskit/<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="3e575d51507e0c0e100f100c" rel="noreferrer noopener nofollow">[email protected]</a>  deduped
│ │ └─┬ @atlaskit/<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="8ce1e9e8e5eda1fae5e9fbe9feccb8b8a2b8a2b8" rel="noreferrer noopener nofollow">[email protected]</a>
│ │   └── @atlaskit/<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="7d141e12133d4f4d534c534f" rel="noreferrer noopener nofollow">[email protected]</a>  deduped
│ ├─┬ @atlaskit/<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="93fef6f7faf2bef6f7fae7fce1d3a0a4bda3bda2a1" rel="noreferrer noopener nofollow">[email protected]</a>
│ │ ├── @atlaskit/<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="3a535955547a080a140b1408" rel="noreferrer noopener nofollow">[email protected]</a>  deduped
│ │ └─┬ @atlaskit/<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="ec818988858dc18f8d9e88acdad4c2dcc2de" rel="noreferrer noopener nofollow">[email protected]</a>
│ │   └── @atlaskit/<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="e9808a8687a9dbd9c7d8c7db" rel="noreferrer noopener nofollow">[email protected]</a>  deduped
│ ├─┬ @atlaskit/<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="bdd0d8d9d4dc90dbd4d1d0cec9cfd4cdfd8e85938d9389" rel="noreferrer noopener nofollow">[email protected]</a>
│ │ ├── @atlaskit/<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="3158525e5f7103011f001f03" rel="noreferrer noopener nofollow">[email protected]</a>  deduped
│ │ └─┬ @atlaskit/<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="2b464e4f424a06484a594f6b1d13051b0519" rel="noreferrer noopener nofollow">[email protected]</a>
│ │   └── @atlaskit/<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="8fe6ece0e1cfbdbfa1bea1bd" rel="noreferrer noopener nofollow">[email protected]</a>  deduped
│ ├─┬ @atlaskit/<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="bbd6dedfd2da96cbd2d8d0dec9fb8e8f95899588" rel="noreferrer noopener nofollow">[email protected]</a>
│ │ ├─┬ @atlaskit/<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="690f05080e29585b475d475c" rel="noreferrer noopener nofollow">[email protected]</a>
│ │ │ └── @atlaskit/<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="18717b7776582a283629362a" rel="noreferrer noopener nofollow">[email protected]</a>  deduped
│ │ ├── @atlaskit/<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="0f666c60614f3d3f213e213d" rel="noreferrer noopener nofollow">[email protected]</a>  deduped
│ │ └─┬ @atlaskit/<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="4f222a2b262e622c2e3d2b0f7977617f617d" rel="noreferrer noopener nofollow">[email protected]</a>
│ │   └── @atlaskit/<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="3e575d51507e0c0e100f100c" rel="noreferrer noopener nofollow">[email protected]</a>  deduped
│ ├─┬ @atlaskit/<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="fd90989389949293bdccc5d3ccc5d3ce" rel="noreferrer noopener nofollow">[email protected]</a>
│ │ ├─┬ @atlaskit/<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="1776617663766557262f39273925" rel="noreferrer noopener nofollow">[email protected]</a>
│ │ │ └── @atlaskit/<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="ef868c8081afdddfc1dec1dd" rel="noreferrer noopener nofollow">[email protected]</a>  deduped
│ │ └── @atlaskit/<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="0e676d61604e3c3e203f203c" rel="noreferrer noopener nofollow">[email protected]</a>  deduped
│ ├─┬ @atlaskit/<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="315c5e55505d1c5558505d5e567100011f071f05" rel="noreferrer noopener nofollow">[email protected]</a>
│ │ └── @atlaskit/<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="b7ded4d8d9f7858799869985" rel="noreferrer noopener nofollow">[email protected]</a>  deduped
│ ├─┬ @atlaskit/<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="443625202d2b04776a766a77" rel="noreferrer noopener nofollow">[email protected]</a>
│ │ └── @atlaskit/<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="2148424e4f6113110f100f13" rel="noreferrer noopener nofollow">[email protected]</a>  deduped
│ ├─┬ @atlaskit/<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="e390868f868097a3d2d2cdd3cdd2d7" rel="noreferrer noopener nofollow">[email protected]</a>
│ │ └── @atlaskit/<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="c4ada7abaa84f6f4eaf5eaf6" rel="noreferrer noopener nofollow">[email protected]</a>  deduped
│ ├─┬ @atlaskit/<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="265552475253556616081f081413" rel="noreferrer noopener nofollow">[email protected]</a>
│ │ └── @atlaskit/<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="5b323834351b696b756a7569" rel="noreferrer noopener nofollow">[email protected]</a>  deduped
│ └─┬ @atlaskit/<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="f48095879fd99091979d879d9b9ab4c5c2dac5dac6" rel="noreferrer noopener nofollow">[email protected]</a>
│   └── @atlaskit/<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="472e24282907757769766975" rel="noreferrer noopener nofollow">[email protected]</a>  deduped
├─┬ @atlaskit/<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="d4b9b1b0bdb5f9a4bdb7bfb1a694e1e0fae6fae7" rel="noreferrer noopener nofollow">[email protected]</a>
│ ├─┬ @atlaskit/<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="385c4a57485c574f5615555d564d78011608160e" rel="noreferrer noopener nofollow">[email protected]</a>
│ │ └── @atlaskit/<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="462f25292806747668776874" rel="noreferrer noopener nofollow">[email protected]</a>  deduped
│ ├─┬ @atlaskit/<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="30565c51577001021e041e05" rel="noreferrer noopener nofollow">[email protected]</a>
│ │ └── @atlaskit/<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="1178727e7f5123213f203f23" rel="noreferrer noopener nofollow">[email protected]</a>  deduped
│ ├── @atlaskit/<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="98f1fbf7f6d8aaa8b6a9b6aa" rel="noreferrer noopener nofollow">[email protected]</a>  deduped
│ ├─┬ @atlaskit/<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="4b262e2f222a66282a392f0b7d73657b6579" rel="noreferrer noopener nofollow">[email protected]</a>
│ │ └── @atlaskit/<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="7c151f13123c4e4c524d524e" rel="noreferrer noopener nofollow">[email protected]</a>  deduped
│ └─┬ @atlaskit/<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="472a22232e266a322e07767569726976" rel="noreferrer noopener nofollow">[email protected]</a>
│   ├─┬ @atlaskit/<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="e8899e899c899aa8d9d0c6d8c6da" rel="noreferrer noopener nofollow">[email protected]</a>
│   │ └── @atlaskit/<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="9af3f9f5f4daa8aab4abb4a8" rel="noreferrer noopener nofollow">[email protected]</a>  deduped
│   └── @atlaskit/<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="7118121e1f3143415f405f43" rel="noreferrer noopener nofollow">[email protected]</a>  deduped
└─┬ @atlaskit/<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="a3d0cec2d1d78ec0c2d1c7e392908d968d92" rel="noreferrer noopener nofollow">[email protected]</a>
  └── @atlaskit/<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="3a535955547a080a140b1408" rel="noreferrer noopener nofollow">[email protected]</a>  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

为了更改嵌套包中的依赖关系,需要重写很多包。在实践中,我需要 fork 所有这些包并更改每个嵌套包的dependency以引用我的 fork 版本,该版本再次仅修改了指向另一个 fork 包的dependency由我。整个替换树的叶子将是一个 package.json ,它指向 @atlaskit/icon@atlaskit/icon-file-type 的自由变体@atlaskit/icon-object

如果不 fork 和修改整个树中的依赖项,真的没有办法解决这个困惑吗?

最佳答案

NPM natively supports package aliases since version 6.9.0

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

  "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

一个简单的管理方法是 create an org in npm这样您就可以拥有像 @my-org-name/editor-core

这样的作用域包

编辑:

正如评论中指出的,上面的解决方案不支持传递依赖,而只支持直接依赖。

目前,即使使用 npm-force-resolutions,npm 似乎也不支持这一点。经过一番研究后,我找不到任何其他工具可以与 npm 一起使用。

然而, yarn 使用 selective dependency resolutions 支持这一点。 :

  "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"
  }

所以我看到了 3 个可供您继续前进的选择:

  1. 迁移到yarn(如果您的项目允许)
  2. 编写一个脚本来解析 package-lock.json 以覆盖已解析的包。这实际上不应该那么难。该脚本可以作为预安装步骤运行,与 npm-force-solutions
  3. 完全相同
  4. 通过 npm-force-resolutions repo 请求此功能,如果熟悉 clojure 并且时间允许,您可能会自己为存储库做出贡献。

祝你好运!

关于node.js - 如何在不接受 Atlassian 设计指南许可的情况下使用 npm 包的替代实现来使用 Atlaskit,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64121161/

相关文章:

arrays - TypoScript:如果为空则覆盖 COA

react-native - npm 安装时遇到代码 EWORKSPACESCONFIG 问题

node.js - Heroku 应用程序未使用正确的 Node 模块

javascript - 尝试确定是否已加载所有图像时 Node.js 挂起

windows - Node.js 安装窗口

Java - "@Override"有什么用?

node.js - 将react-scripts版本从3.4.0更新到5.0.0导致类型错误: Cannot read properties of undefined (reading 'getStackAddendum' )

javascript - 构建一个简单的 Node.js 抓取功能

node.js - TypeORM 树级联移除

java - 覆盖接口(interface)?