【发布时间】:2014-03-10 05:16:27
【问题描述】:
我正在发布一个用 Browserify 开发的 npm 包,想知道构造 package.json 的正确方法是什么。
包是node server-client app(其实是atom包),客户端是基于Browseriy的。
./www/js/index.js -> ./www/js/index.bundled.js
需要的模块是marked和highlight.js。
这两个模块仅用于由 Blowserfiy 捆绑的客户端代码/文件。
一个懒惰而简单的解决方案是简单的,只是拥有
package.json A
{
......,
"dependencies":
{
...,
...,
"highlight.js": "*",
"marked": "*"
}
}
并在 npm 包文件中包含 www/js/index.bundled.js 文件,就像在我的本地开发环境中的 browserify 之后一样。
但是,现在我认为 npm package.json 可以是以下之一:
package.json B
{
......,
"dependencies":
{
...,
...,
},
"devDependencies":
{
"highlight.js": "*",
"marked": "*",
"browserify": "*"
}
}
在这种情况下,浏览器化的 ./www/js/index.bundled.js 文件留在 npm 包中,并将 marked 和 highlight.js 视为 devDependencies 以及 browserify。
然后
package.json C
{
......,
"dependencies":
{
...,
...,
"highlight.js": "*",
"marked": "*",
"browserify": "*"
},
"scripts": {
"run": "browserify ./www/js/index.js -o ./www/js/index.bundled.js"
}
}
告诉你,我从来没有试过这个,也不知道这个脚本运行实际上是在npm install myPackage上运行的,也许不是,也许你知道正确的配置,也许没有这样的东西。
在这种情况下,./www/js/index.bundled.js 被排除在 npm 包文件之外,并由最新的 npm 打包 marked 和 highlight.js 构建。
我认为这种方式有点合适的原因是特别是在npm模块在服务器端和客户端都使用和共享的场景中。
例如,看看dnode。该 RPC 模块由 browserify (@substack) 的同一作者开发,服务器端和客户端应共享相同版本的 dnode 模块。如果预浏览器化的./www/js/index.bundled.js 捆绑在已发布的 npm 包中,与服务器端 dnode 相比,它将过时。当然我们可以通过 package.json 指定要安装的版本,但最好在服务器端和客户端都使用最新的。
有什么建议吗?谢谢。
【问题讨论】:
标签: node.js npm browserify