【问题标题】:Why use bin/www and not index.js?为什么使用 bin/www 而不是 index.js?
【发布时间】:2019-04-01 08:47:05
【问题描述】:
express-generator 工具会创建一个名为bin/www 的文件并将其用作应用程序的主要入口点。我相信我已经看到其他几个模块也这样做了,但绝大多数只是使用index.js。
这背后的原理是什么?我当然理解为什么要将服务器和用于设置程序的代码拆分为单独的模块,但为什么bin/www 而不是index.js?为什么要将主入口点嵌套到比它调用的东西更深两层的程序? 并且删除文件扩展名,使其更具描述性?
这背后是否有一个聪明的、不明显的原因?我也应该将它用于我的节点模块吗?
谢谢!
[编辑]:
所有好的答案,谢谢大家!我已经接受指出这是包含可执行文件的包的标准行为。这是我在这方面遇到的更多阅读:
【问题讨论】:
标签:
javascript
node.js
express
code-structure
express-generator
【解决方案1】:
您习惯于运行npm run,而不是系统管理员。他会在bin目录中寻找可执行文件(属性x)。
入口点index.js 用于节点模块。所有提供在控制台上运行的命令的包都包含bin 目录。
这个扩展被移除了,因为它不是一个脚本,而是一个程序。而且这些没有扩展。
【解决方案2】:
express-generator 为 express 应用程序创建一个基本结构。按照惯例,应用程序的入口点是 index.js 或 app.js。实际上,express-generator 在应用程序的根目录下创建了一个 app.js,并带有 express 的初始设置。
另外,按照惯例,bin/ 目录用于存放二进制文件,并通过扩展名用于您可以直接启动的脚本(注意 www 文件第一行的 shebang)。这在 Linux 上很常见,二进制文件没有扩展名,这可以解释为该文件保留此习惯的选择。
再次按照惯例,www 用于命名 Web 应用程序(如 Apache 服务器中的 /var/www/html)
无论如何,正如文档所说,
生成器创建的应用程序结构只是众多方法之一
构建 Express 应用程序。随意使用此结构或修改它
最适合您的需求。
另见this answer,他谈到了 express 在版本 3 和 4 之间的核心结构,以及移除了外部模块。