Node.js Babel 构建和 npm 模块别名

Node.js Babel build and npm module-alias

我正在为我的 Node.js + Express.js 项目使用 module-alias,运行 它与 Babel 一起用于 ES2015 支持。

应用程序在使用 babel-node 启动时运行完美,但是,如果我首先使用 babel(来自 package.json)构建它:

"build": "babel ./app --out-dir ./app_dist"

然后开始:

"start": "node ./app_dist/bin/www"

显然找不到module-alias指定的正确路径。 Node.js 没有查看 app_dist,而是在 app 中搜索导入,发现它不理解并抛出的 ES2015 import 指令:

SyntaxError: Unexpected token import

如果我在构建开始之前更改别名,从 appapp_dist,它会起作用,但问题是如何映射这些别名(或如何使用不同的 _moduleAliases 配置)以便应用程序在开发和生产中正确解析路径?

也许还有另一种方法可以用这种堆栈为模块起别名?提前致谢。

已找到此问题的解决方案。

为了使用 module-alias 设置相对路径别名,它们不应在 package.json 中定义,而应在将使用 Babel 转译的根目录中的 JavaScript 文件中定义.

在我的例子中,在 config 目录中创建一个 aliases.js 脚本,如下所示:

import path from 'path';
import moduleAlias from 'module-alias';

moduleAlias.addAlias('@root', path.resolve(__dirname, '../../'));

将导致相对于当前工作目录的路径解析,解决所描述的问题。