使用 Node.js 的类似 PHP 的自动加载器

Nic*_*tte 9 php dependency-management autoloader node.js npm

我正在慢慢地从 PHP 过渡到 Node.js,并试图找到类似于composer dumpautoload. 多亏了PSR-4,当use在每个文件的开头使用带有简单语句的命令时,可以很容易地访问 PHP 中任何文件中的任何类。

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

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

一些 testClass.js(类文件)

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

module.exports = testClass ;
Run Code Online (Sandbox Code Playgroud)

通常这是您将放在另一个文件 index.js 文件中的内容:

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

testClass.sayHello();
Run Code Online (Sandbox Code Playgroud)

但是想象一下,您可以使用一些应用程序或命令(例如 PHPcomposer dumpautoload并简单地运行以下命令)为所有类预先编制索引:

var testClass = require('testClass');

testClass.sayHello();
Run Code Online (Sandbox Code Playgroud)

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

我错过了什么?

Nic*_*tte 7

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变化,可以支持绝对路径)

有几个答案在这里https://gist.github.com/branneman/8048520),他们似乎都打破IDE支持(我只用WebStorm测试):

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

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