node.js中的app.js,index.js和server.js的约定?

you*_*rrr 28 conventions node.js

在node.js中,似乎我遇到了相同的3个文件名来描述应用程序的主要入口点:

  • 使用express-generator包时,app.js会创建一个文件作为生成的应用程序的主入口点.
  • 通过创建新package.json文件时npm init,会提示输入主入口点文件.默认值为index.js.
  • 在我看到的一些程序中,server.js也是主要的切入点.

其他时候,似乎它们的使用方式存在细微差别.例如,该节点的应用程序的目录结构使用index.jsserver.js在不同的上下文中:

app
  |- modules
  |    |- moduleA
  |    |    |- controllers
  |    |    |    |- controllerA.js
  |    |    |    +- controllerB.js
  |    |    |- services
  |    |    |    +- someService.js
  |    |    +- index.js <--------------
  |    +- index.js <-------------------
  |- middleware.js
  +- index.js <------------------------
config
  +- index.js <------------------------
web
  |- css
  |- js
server.js <----------------------------
Run Code Online (Sandbox Code Playgroud)

这三个名字之间有什么不同?

zum*_*ard 13

即使你可以调用任何你想要的文件,调用入口点index.js或server.js也是有利的.

为什么index.js: 当你发出npm init它时,会将模块的主入口点设置为index.js.有些人不会改变它,所以他们最终命名他们的主要入口点index.js.这意味着还有一件事要做.

为什么server.js: 如果您的节点包不会被另一个包使用,而是一个独立的应用程序,那么如果您调用主入口点server.js,那么您可以发布npm start并启动您的应用程序. npm start默认情况下将运行您的server.js文件.要更改此行为,请start在package.json中提供脚本.如果start存在脚本,npm start则会运行该脚本.

app.js只是一个惯例 - 它的唯一优势是某些IDE(如Visual Studio Code)将默认为app.js作为您调试的程序的入口点.这样当使用最常见的框架Express时,会创建一个app.js文件,"它只是工作"


Kar*_*son 8

这很简单!

如果您的应用程序要在其他应用程序中使用:index.js

如果您的应用程序不用于其他应用程序:server.jsapp.js

如前所述,原因是,在调用 时npm start,如果未在 中定义package.json,则会自动查找server.js。当将另一个模块包含到您的应用程序中时,它会查找index.js.

额外: 当以某种方式自动找到时,我也倾向于仅将其index.js用作文件名。这让我知道该文件是直接调用还是间接调用。

使用npm init 时,它会生成默认的index.js


小智 5

在我工作的地方,我们并没有真正确定一种格式,所以我们有一些带有 index.js 的应用程序,一些带有 server.js 的应用程序。此外,有些我们在根级别有一个 config.js 文件,其他人在 config 文件夹中(所以需要(config/config.js)。我们甚至有一个 server.js 在服务器文件夹中。

当我们想要自动化我们的部署过程时,麻烦就来了。当我们必须对每项服务进行大量小的修改时,这就像是技术债务。

也就是说,选择一种对您有意义的格式并坚持下去。


Fel*_*ets 4

事实上,所有这些都只是名称,您必须在自己的工作中保持一致,正如 @Oka 在之前的答案中指出的那样。

这里唯一有效的一点是,节点的模块化性质可能在您的决策中发挥重要作用,正如 NodeJS 文档的文件夹作为模块部分所指出的,有 3 种方法可以将文件夹作为参数传递给 require() ,第二种也是常见的一种是从文件夹中自动加载index.js文件,这是许多NPM包的构建方式,并且根据自动加载NodeJS功能,它是简单和标准的。如果您正在开发 NPM 包,这似乎是最好的选择。

最后,正如其他人指出的那样,您可以选择这三个中的任何一个,甚至可以选择另一个,但请坚持您的决定。基于上述事实,我的决定是始终使用 index.js。

  • 为什么有些人使用app.js而不是index.js?一定有原因吧? (2认同)
  • index.php 或index.html 或index.* 可以追溯到Apache 统治时期。每当有人请求目录时,它都会显示该目录中文件的索引。因此,index.html 只是替换了默认的索引功能。所以我猜index.js 是取自该约定。但感觉已经过时了,因为我们不再在节点中“索引”目录。app.js 对我来说听起来更好、更符合逻辑。 (2认同)