将package.json用于客户端包,可以在浏览器

时间:2016-04-25 14:04:04

标签: javascript json browser npm package

我正在考虑将package.json的格式扩展为在客户端端加载动态包(插件),我想了解这个想法是否与无论是否愿景。换句话说,我想在浏览器运行时加载一组共享公共元数据的模块。像system.js和jspm这样的解决方案适用于模块管理,但我所寻求的是客户端的动态管理。

详细说明我想添加一个像" myapp-clientRuntimeDependencies"这将允许指定由浏览器而不是标准预打包加载的依赖项(npm install->类似browserify的解决方案)。

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社区的任何反馈。

参考文献: 扩展package.json:http://blog.npmjs.org/post/101775448305/npm-and-front-end-packaging

修改

问题没有得到很好的解决,更好的方式是:

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

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

2 个答案:

答案 0 :(得分:1)

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

有一件事并没有完全点击我:你说system.js和jspm适合模块管理,但是你正在寻找包管理< / em>的。最后,包和模块往往是同义词,因为包成为模块。

我可能误解了你正在寻找的是什么,但是从我可以收集到的内容来看,我建议你看看代码分裂...这实际上是创建了将要加载的单独的js文件动态地根据需要而不是将所有javascript捆绑到一个文件中。 Here's some docs on how to do this with webpack(我确定browserify也会这样做。)

答案 1 :(得分:0)

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

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

  

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

但是如果你想要更安全,你可以使用不同的文件(例如Bower就可以)。