我已经做了很多搜索。但是,仍然对Node项目的package.json中的“ main”参数有疑问。
- 填写此字段有什么帮助?用另一种方式问,如果出现此字段,是否可以以其他样式启动模块?
- 我可以在主要参数中填写多个脚本吗?如果是,它们是否将作为两个线程启动?如果没有,如何在模块中启动两个脚本并使它们并行运行?
我知道第二个问题很奇怪。这是因为我在OpenShift上托管了Node.js应用程序,但是该应用程序包含两个主要组件。一个是REST API,另一个是通知传递服务。
我担心如果将通知API实施为单个线程,则通知传递过程将阻止REST API。但是,它们必须连接到相同的MongoDB卡式盒。此外,如果两个组件都可以在同一档位中使用,我想节省一个档位。
欢迎任何建议。
从npm文档中:
主要字段是模块ID,它是程序的主要入口点。也就是说,如果您的包名为foo,并且用户安装了该包,然后执行require(“ foo”),则将返回主模块的导出对象。
这应该是相对于软件包文件夹根目录的模块ID。
对于大多数模块,拥有一个主脚本是最有意义的,而通常没有太多其他东西。
简而言之:
- 仅当包的入口点与其根文件夹中的入口点不同时,才需要
main
参数。例如,人们常把入口点或,在这种情况下,相应的脚本必须被描述为在。package.json
index.js
lib/index.js
lib/<packagename>.js
main
package.json
- 您不能将两个脚本用作
main
,仅仅是因为require('yourpackagename')
必须明确定义入口点。
要回答第一个问题,加载模块的方式取决于模块入口点和package.json的主要参数。
假设您具有以下文件结构:
my-npm-module
|-- lib
| |-- module.js
|-- package.json
在package.json中没有main参数的情况下,您必须通过提供模块入口点来加载模块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
键的一项重要功能是为您的入口点提供路径。使用时,这非常有用nodemon
。如果你有工作nodemon
,你定义main
在你的钥匙package.json
为让说"main": "./src/server/app.js"
,那么你可以简单地杀青了打字的服务器nodemon
与根的CLI为PWD代替 nodemon ./src/server/app.js
。
据我所知,它是npm的节点包(库)的主要入口点。仅当您的npm项目成为一个节点软件包(库),其他人可以通过npm安装该软件包时才需要它。
假设您有一个带有build /,dist /或lib /文件夹的库。在此文件夹中,您的库得到以下编译文件:
-lib/
--bundle.js
然后在package.json中,告诉npm如何访问该库(节点包):
{
"name": "my-library-name",
"main": "lib/bundle.js",
...
}
将带有npm的节点软件包安装到JS项目之后,可以从捆绑的bundle.js文件中导入功能:
import { add, subtract } from 'my-library-name';
当对库使用代码拆分(例如Webpack)时,也是如此。例如,此webpack.config.js利用代码将项目分成多个包,而不是一个包。
module.exports = {
entry: {
main: './src/index.js',
add: './src/add.js',
subtract: './src/subtract.js',
},
output: {
path: `${__dirname}/lib`,
filename: '[name].js',
library: 'my-library-name',
libraryTarget: 'umd',
},
...
}
不过,您仍可以在package.json中为您的库定义一个主入口点:
{
"name": "my-library-name",
"main": "lib/main.js",
...
}
然后,在使用库时,可以从主入口点导入文件:
import { add, subtract } from 'my-library-name';
但是,您也可以绕过package.json的主入口点,并导入拆分后的代码束:
import add from 'my-library-name/lib/add';
import subtract from 'my-library-name/lib/subtract';
毕竟,package.json中的main属性仅指向库的主入口点文件。
对于OpenShift,每个应用程序只能绑定一个PORT和IP对。听起来您应该能够通过为每个服务端点添加内部路由来从单个nodejs实例提供这两种服务。
我有一些有关OpenShift如何使用项目的package.json在此处启动应用程序的信息:https : //www.openshift.com/blogs/run-your-nodejs-projects-on-openshift-in-two-simple-steps #package_json
只需将其视为“起点”即可。
从C#的面向对象编程的角度来看,它是对象类的init()或构造函数,这就是“入口点”的含义。
例如
public class IamMain // when export and require this guy
{
public IamMain() // this is "main"
{...}
... // many others such as function, properties, etc.
}
文章标签:asynchronous , javascript , node.js , openshift , rest
版权声明:本文为原创文章,版权归 javascript 所有,欢迎分享本文,转载请保留出处!
评论已关闭!