cnpm / cnpmcore

Private NPM Registry for Enterprise
https://npmmirror.com
MIT License
572 stars 78 forks source link

能不支持和jsdelivr&unpkg一样的npm路径格式后缀,这样方便在importmap中用 #696

Open i18n-now opened 1 month ago

i18n-now commented 1 month ago

比如我用importmap 定义了前缀, 方便直接引用npm包

{"imports":{"npm/":"https://cdn.jsdelivr.net/npm/"}}

然后国内用户我想切换到 npmmirror ,但是我发现路径格式后缀不一样,没法直接切换

https://registry.npmmirror.com/jquery/3.6.4/files/dist/jquery.min.js https://cdn.jsdelivr.net/npm/jquery@3.6.4/dist/jquery.min.js https://unpkg.com/jquery@3.6.4/dist/jquery.min.js

你可以看到 https://cdn.jsdelivr.net/npmhttps://unpkg.com 路径格式一样,可以直接替换importmap,但是 npmmirror 不行

https://registry.npmmirror.com/@mdi/js/latest/files/build.js 这种带@mdi组织的格式也需要和 unpkg一致,才比较方便

@ 同样支持 @latest https://cdn.jsdelivr.net/npm/jquery@latest/dist/jquery.min.js

github-actions[bot] commented 1 month ago

我们已经看到你的反馈,如果是功能缺陷,可以提供一下重现该问题的方式;如果是新功能需求,我们会尽快加入讨论。同时我们非常期待你可以加入我们的贡献者行列,让项目可以长期可持续发展。

fengmk2 commented 1 month ago

importmap 没有限制 url 格式的吧?

<script type="importmap">
  {
    "imports": {
      "jquery": "https://registry.npmmirror.com/jquery/3.6.4/files/dist/jquery.min.js"
    }
  }
</script>
i18n-now commented 1 month ago

我一套代码,我想国内用这个,国外用jsdriver

我不止引用一个包,我会引用一系列文件

比如xxx/lang@0.2.5/zh.js 这样的语言文件有几百个会按需动态加载 我的前端组件会打包出去给第三方用,所以语言文件版本号我会写死在组件里,这样防止造成版本问题 。

而对方引用组件不需要写版本号,这样可以在线更新。

我一般会让这么写

后缀不统一就没法用了。


具体的代码: https://atomgit.com/i18n/plugin/blob/dev/lang/src/onI18n.js

image
import bintxt from "x/bintxt.js"
import langHook from "x/langHook.js"
import { fBin } from "x/f.js"

/*
vite 打包时会自动锁定语言文件的版本号

  _I18N+"@latest/" -> _I18N+"@0.1.0/"

https://cdn.jsdelivr.net/npm/@i18n.site/i18n@0.1.1/zh.js
*/

export default langHook(async (lang) =>
    bintxt(await fBin(_I18N + "@latest/" + lang + ".js")),
)[0]

我在serviceWorker中做了url拦截,重试多个cdn网站,目前只有 npmmirror格式和其他不一样,

url不一致,各种适配都会很麻烦(虽然hack一下也能搞)

https://atomgit.com/i18n/18x/blob/dev/serviceWorker/serviceWorker.js https://atomgit.com/i18n/18x/blob/dev/serviceWorker/Jsd.js

fengmk2 commented 1 month ago

importmap 没有规定这种格式,目前没有看到有什么规范,先不做支持。

i18n-now commented 1 month ago

https://developer.mozilla.org/zh-CN/docs/Web/HTML/Element/script/type/importmap#%E6%98%A0%E5%B0%84%E8%B7%AF%E5%BE%84%E5%89%8D%E7%BC%80

模块标识符映射键也可用于重新映射模块标识符中的路径前缀。请注意,在这种情况下,属性和映射路径都必须有一个尾随的正斜杠(/)。

然后我们可以这样导入 circle 模块。

是有这种格式。