我正在为我的 Node.js + Express.js 项目使用模块别名,使用 Babel 运行它以获得 ES2015 支持。
应用程序在开始使用 babel-node
时运行完美,但是,如果我首先使用 babel
(从 package.json
开始(构建它:
"build": "babel ./app --out-dir ./app_dist"
然后开始:
"start": "node ./app_dist/bin/www"
它显然找不到用模块别名指定的正确路径。Node.js没有研究app_dist
而是在app
中搜索导入,找到它不理解的ES2015 import
指令并抛出:
语法错误:意外的令牌导入
如果我在该构建开始之前更改别名,从 app
更改为 app_dist
,它可以工作,但问题是,如何映射这些别名(或如何使用不同的_moduleAliases
配置(,以便应用程序在开发和生产中正确解析路径?
也许还有另一种方法可以使用这样的堆栈为模块别名?提前谢谢。
找到了此问题的解决方案。
为了使用模块别名设置相对路径别名,它们不应该在 package.json
中定义,而是在根目录内的 JavaScript 文件中定义,该目录将使用 Babel 进行转译。
就我而言,在目录中创建一个aliases.js
脚本config
如下所示:
import path from 'path';
import moduleAlias from 'module-alias';
moduleAlias.addAlias('@root', path.resolve(__dirname, '../../'));
将导致相对于当前工作目录的路径解析,解决所描述的问题。