PHP-喜欢使用 Node.js 的自动加载器

PHP-Like Autoloader using Node.js

我正在从 PHP 慢慢过渡到 Node.js,并试图找到类似于 composer dumpautoload 的东西。感谢 PSR-4,当在每个文件的开头使用简单的 use 语句使用此命令时,可以轻松访问 PHP 中任何文件中的任何 class。

npm 似乎在管理包和依赖项方面做得很好,但在您自己的项目中具有相同的灵活性将避免创建 require 语句,如果文件更改路径,这些语句很容易中断。

我要查找的示例 - 同一文件夹中的 2 个文件:

一些 testClass.js(class 文件)

var testClass = {
    sayHello: function () {
        console.log('this is a test');
    }
};

module.exports = testClass ;

通常这就是您要放入另一个文件的内容 index.js 文件:

var testClass = require('./testClass');

testClass.sayHello();

但想象一下,您可以使用某些应用程序或命令(例如 PHP 的 composer dumpautoload 和简单的 运行 为所有 classes 预先编制索引:

var testClass = require('testClass');

testClass.sayHello();

我找不到任何似乎可以实现此目的的解决方案。

我是不是漏掉了什么?

编辑 2020 年 12 月

Yarn2 确实发布了一个名为 Plug'n'Play 的功能,它似乎模仿了 PHP 的自动加载器:https://yarnpkg.com/features/pnp

已知某些软件包存在问题,但我自己没有测试过。


简短的回答是:

更多详情,继续阅读:

requireimport 目前的工作方式存在两大挑战:

  1. 相对路径难以阅读,并且在使用同名文件时会变得混乱。
  2. 开发人员必须严重依赖 IDE 来重构他们的代码或查找文件在另一个文件中的位置。

虽然 PHP 似乎已经制定了自己的标准并且有点自成一格,但即使有人会开发等效的解决方案来为 Node.js/JavaScript 实现相同的目标,我们也会仍然需要很好的 IDE 支持。为了获得良好的 IDE 支持,此类更改将:

  1. 需要透明并融入 IDE 目前的工作方式。
  2. 是由社区本身驱动的更改(requireimport 可以支持绝对路径的更改)

有几个答案 here (https://gist.github.com/branneman/8048520),它们似乎都破坏了 IDE 支持(我只用 WebStorm 测试过):

  1. 使用别名或在路径前添加变量:中断 IDE 对自动完成和 renaming/refactoring 的支持。
  2. 使用 NODE_PATH 作为根路径:中断 IDE 对自动完成和 renaming/refactoring 的支持。
  3. 包装 require 以支持 /:在 renaming/refactoring 时中断 IDE 支持。
  4. 创建新的自定义方法:中断 IDE 对自动完成的支持。

总的来说,考虑到 IDE 支持优先于代码可读性,看起来没有很好的方法来使用 Node.js 实现对当前依赖管理的更改,而没有社区支持这种更改.

虽然不完全像 PHP,但相似且非常方便。我喜欢这个包。有点老了,但绝对是对的方向。

https://github.com/Specla/Autoloader

然后对于数据库模型,如果你像我一样使用 Sequelize,那是相当不错的。 https://github.com/boxsnake/sequelize-autoload