将 package.json 用于客户端包,可以在浏览器中动态加载

Using package.json for client side packages, that could be loaded dynamically in browser

本文关键字:浏览器 加载 动态 json package 用于 客户端      更新时间:2023-09-26

我正在考虑扩展package.json的格式以在客户端包含动态包(插件)加载,我想了解这个想法是否与npm愿景相矛盾。换句话说,我想在浏览器运行时中加载一堆共享公共元数据的模块。像 system.js 和 jspm 这样的解决方案非常适合模块管理,但我寻求的是客户端的动态管理。

详细地说,我想添加一个像"myapp-clientRuntimeDependencies"这样的属性,它允许指定由浏览器加载的依赖项,而不是标准的预打包(npm install->browserify-like solution)。

package.json 示例:

{
    name: "myapp-package",
    version: "",
    myapp-clientRuntimeDependencies: {
        "myapp-plugin": "file:myapp-plugin",
        "myapp-anotherplugin": "file:myapp-anotherplugin"
    },
    peerDependencies: {
        "myapp-core": "1.0.0"
    }
}

问题:这个想法是否与"npm"和"package.json"的愿景相矛盾?如果是,那为什么?

非常感谢

来自 npm 社区的任何反馈。

引用:扩展包.json: http://blog.npmjs.org/post/101775448305/npm-and-front-end-packaging

编辑:

这个问题没有表述得太好,更好的提问方式是:

在 package.json 中指定 2 个动态加载的前端包之间的运行时依赖关系的最标准方法是什么(例如,由一些现有工具处理,可能由 npm 支持)?

将 JSON 格式的元数据附加到动态加载的前端包的最标准方法是什么?

我不会说它与package.json的愿景相冲突,但它似乎与它通常的使用方式有些冲突。正如您似乎知道的那样,package.json 通常在运行时之前使用。为了将 package.json 中的某些内容加载到运行时中,您必须将 package.json 加载到前端代码中。如果您正在存储不希望通过简单视图源对前端可见的配置,这肯定会带来问题。

有一件事不太符合我的观点:你说系统.js和jspm对模块管理很好,但你正在寻找包管理。最后,包和模块往往是同义词,因为包变成了模块。

可能误解了你在寻找什么,但从我能收集到的信息来看,我建议你看看代码拆分......这本质上是创建单独的JS文件,这些文件将根据需要动态加载,而不是将所有JavaScript捆绑到单个文件中。这里有一些关于如何使用 webpack 执行此操作的文档(我相信浏览器化也可以这样做)。

如果我

理解正确,您的问题是关于使用package.json文件包含您自己的应用程序配置。在你描述的示例中,你将使用此类配置来让你的应用知道哪些依赖项可以在运行时加载。

实际上没有什么可以阻止您在package.json文件中插入自己的字段,除了与npm用于其他含义的名称发生冲突的风险。但是,如果您使用非常具体的名称(如您的示例所示),您应该足够安全。实际上,许多 lint 和构建工具已经这样做了。它甚至明确写在你提到的帖子中:

如果您的工具需要元数据才能使其工作,请将其放在 package.json 中。不问就这样做是不礼貌的,但我们邀请你这样做,所以继续吧。注册表是一个无模式存储,因此您添加的每个字段都与所有其他字段处于平等地位,我们不会删除或抱怨新字段(只要它们不与现有字段冲突)。

但是如果你想更安全,你可以求助于使用不同的文件(例如Bower所做的)。