我发布了一个用Browserify开发的npm包,并想知道构造package.json
的正确方法是什么。
该软件包是节点服务器 - 客户端应用程序(实际上是atom软件包),客户端基于Browseriy。
./www/js/index.js
- > ./www/js/index.bundled.js
所需的模块是marked和highlight.js。
这两个模块仅用于由blowserfiy捆绑的客户端代码/文件。
懒惰而简单的解决方案很简单,就是
package.json A
{
......,
"dependencies":
{
...,
...,
"highlight.js": "*",
"marked": "*"
}
}
并将www/js/index.bundled.js
文件包含在npm包文件中,就像在本地开发环境中浏览后一样。
但是,现在我认为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模块。如果在已发布的npm包中捆绑了预浏览的./www/js/index.bundled.js
,则与服务器端dnode相比,它将过时。当然我们可以通过package.json指定要安装的版本,但最好在服务器端和客户端使用最新版本。
有什么建议吗?感谢。
答案 0 :(得分:1)
我建议使用第二选择并指定browserify
作为devDependency。
您必须在将软件包发布到npm注册表之前构建它,这样用户就不需要自己安装browserify。
将Makefile
和make
添加为预发布脚本也很有用。