我已经做了一些调查。但是,仍然对包中的“main”参数有疑问。Node项目的json。

填写这个字段会有什么帮助呢?问在另一种方式,我可以启动模块在不同的风格,如果这个字段出现? 我可以在主参数中填充多个脚本吗?如果是,它们会作为两个线程启动吗?如果没有,我如何在一个模块中启动两个脚本,并让它们并行运行?

我知道第二个问题很奇怪。这是因为我在OpenShift上托管了一个Node.js应用程序,但该应用程序由两个主要组件组成。一个是REST API,一个是通知传递服务。

如果将通知传递过程实现为单个线程,恐怕会阻塞REST API。但是,它们必须连接到相同的MongoDB磁带。此外,我想节省一个齿轮,如果两个组件可以在同一齿轮服务,如果可能的话。

欢迎提出任何建议。


当前回答

在Node.js入门文档中,它声明;

额外注意:如果传递给require的文件名实际上是一个目录,它将首先查找package。并加载main属性中引用的文件。否则,它将查找index.js。

其他回答

如果你的包里有。json文件:

{
"name": "zig-zag",
"main": "lib/entry.js",
...
}

Lib /entry.js将是你的包的主要入口点。

当调用

require('zig-zag');

在node中,lib/entry.js将是实际需要的文件。

主键的一个重要功能是为入口点提供路径。这在与nodemon一起工作时非常有用。如果您使用nodemon,并且在包中定义了主键。比如“main”:“./src/server/app.js”,然后你可以在命令行中输入nodemon,用root作为pwd,而不是nodemon ./src/server/app.js来启动服务器。

在Node.js入门文档中,它声明;

额外注意:如果传递给require的文件名实际上是一个目录,它将首先查找package。并加载main属性中引用的文件。否则,它将查找index.js。

据我所知,它是npm的节点包(库)的主要入口点。如果你的npm项目变成了一个节点包(库),其他人可以通过npm安装它。


假设您有一个带有build/、dist/或lib/文件夹的库。在这个文件夹中,你得到了你的库的以下编译文件:

-lib/
--bundle.js

然后在你的包裹里。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';

但是,您也可以绕过包的主入口点。并导入代码拆分后的bundle:

import add from 'my-library-name/lib/add';
import subtract from 'my-library-name/lib/subtract';

毕竟,包中的主要属性。Json只指向你的库的主要入口点文件。

要回答第一个问题,加载模块的方式取决于模块入口点和package.json的主要参数。

假设你有如下的文件结构:

my-npm-module
|-- lib
|   |-- module.js
|-- package.json

包内无主要参数。Json,你必须通过给出模块入口点:require('my-npm-module/lib/module.js')来加载模块。

如果你设置了包。Json的主要参数如下:"main": "lib/module.js",你将能够以这种方式加载模块:require('my-npm-module')。