node.js - 无法使用模块解析运行已编译的打字稿编
问题描述
我正在尝试编译以下打字稿文件
import { magic } from 'lib/magic';
magic();
文件结构为:
./src/
main.ts
lib/
a/magic.ts
b/magic.ts
在 tsconfig.json 我映射lib/magic
到正确的文件如下
{
"compilerOptions": {
"target": "esnext",
"module": "commonjs",
"outDir": "./dist",
"baseUrl": ".",
"paths": {
"lib/*": [ "src/lib/a/*" ]
}
},
"include": [ "./src/**/*.ts" ],
"exclude": [ "./node_modules" ]
}
正是该paths
部分将导入映射lib/magic
到./src/lib/a/magic.ts
.
所以,我可以编译如下
$> tsc -p ./tsconfig-a.json
它产生输出dist
。但是,当我尝试运行它时
$> node ./dist/main.js
internal/modules/cjs/loader.js:626
throw err;
^
Error: Cannot find module 'lib/magic'
Require stack:
...
这是有道理的,因为在 dist 中没有lib/magic
. 任何建议如何解决这个问题?
解决方案
直到有人证明我错了,这是我迄今为止的发现。
这是一个问题,其中指出所有这些实际上都是预期的行为。
所以你基本上必须在第二步中修复它。就我而言,我想制作 2 个版本,一个a
用于b
. 修复它的最简单方法是让它默认工作a
如下
import { magic } from './lib/a/magic';
magic();
b
然后按如下方式构建和替换该路径
sed -e 's/lib\/a/lib\/b/' ./dist/main.js > ./dist/main-node.js
就我而言,一个版本用于 NodeJs,另一个用于浏览器,因此我还需要添加.js
扩展。以防万一有人感兴趣,这是命令
$> echo "import { magic } from './lib/a/magic';" | sed "s#^\(import[^']*\)'\([^']*\)#\1 '\2.js#g"
如果您有更好的解决方案,请告诉我,因为这一切都感觉有点 hacky
推荐阅读
- python - 使用 beautifulsoup 循环遍历 2 个文件并将输出打印到单个 panda 数据帧
- java - Spring Boot RESTFUL 控制器的单元测试
- javascript - 如何从具有最大值的嵌套 JSON 数组对象中获取元素
- java - 子字符串管理出现错误
- android - 错误-从 android Webview 中的 URL 加载 PDF
- r - 在 R 中生成唯一子字符串表
- powershell - 使用 Get-Counter 检索平均 CPU 工作负载
- javascript - (PERCY) 警告:跳过视觉测试。未提供 PERCY_TOKEN
- postgresql - Apache Giraph:将 postgres 行作为顶点读取?
- c# - 这种不安全的代码是否也适用于 .NET Core 3?