Node.js package.json的主要参数
我已经做了相当多的search。 不过,对Node.js的package.json中的主要参数仍有疑问。
- 如何填补这个领域的帮助? 以另一种方式提问,如果该字段存在,我可以以不同的样式启动模块吗?
- 我可以将多个脚本填充到主参数中吗? 如果是的话,他们会开始两个线程? 如果不是,我该如何在模块中启动两个脚本并让它们并行运行?
我知道第二个问题很奇怪。 这是因为我在OpenShift上托pipe了一个Node.js应用程序,但应用程序由两个主要组件组成。 一个是REST API,另一个是通知传递服务。
如果它们被实现为单个线程,我担心通知传递过程会阻塞REST API。 但是,他们必须连接到相同的MongoDB盒式磁带。 此外,如果可能的话,两个部件可以在同一个档位上工作,我想节省一个档位。
任何build议,欢迎。
从npm文档 :
主要字段是模块ID,是您程序的主要入口点。 也就是说,如果你的包被命名为foo,并且用户安装它,然后做require(“foo”),那么你的主模块的exports对象将被返回。
这应该是一个相对于你的包文件夹的根的模块ID。
对于大多数模块,最重要的是有一个主要的脚本,通常没有其他的东西。
简而言之:
- 如果
package.json
的入口点与其根文件夹中的index.js
不同,则只需要package.json
的main
参数。 例如,人们经常把入口点放在lib/index.js
或lib/<packagename>.js
,在这种情况下,相应的脚本必须在package.json
描述为main
。 - 因为入口点
require('yourpackagename')
必须明确定义,所以不能有两个脚本作为main
。
要回答第一个问题,加载模块的方式取决于模块入口点和package.json的主要参数。
假设您有以下文件结构:
my-npm-module |-- lib | |-- module.js |-- package.json
如果没有package.json中的主参数,则必须通过给出模块入口点来加载模块: require('my-npm-module/lib/module.js')
。
如果将package.json主参数设置为"main": "lib/module.js"
,则可以通过require('my-npm-module')
加载模块。
如果你有例如你的package.json
文件:
{ "name": "zig-zag", "main": "lib/entry.js", ... }
lib/entry.js
将成为你的软件包的主要入口点。 打电话时
require( 'zig-zag' );
在节点中, lib/entry.js
将是实际需要的文件。
main
关键的一个重要function是为您的切入点提供了path。 使用nodemon
时,这非常有用。 如果您使用nodemon
并且在package.json
定义了main
键,如"main": "./src/server/app.js"
,那么您可以简单地在CLI中键入nodemon
来启动服务器, root作为pwd 而不是 nodemon ./src/server/app.js
。
对于OpenShift,您只能获得一个PORT和IP绑定(每个应用程序)。 听起来你应该能够通过为每个服务端点添加内部路由来从一个nodejs实例服务这两个服务。
我有一些关于OpenShift如何使用你的项目的package.json在这里启动你的应用程序的信息: https : //www.openshift.com/blogs/run-your-nodejs-projects-on-openshift-in-two-simple-steps #package_json