TypeScript原生Node模块被宿主项目导入的配置问题咨询
TypeScript模块导入与自动转译问题解答
我正在开发两个TypeScript项目:一个是名为my-node-module的原生Node模块,被另一个名为host-project的宿主项目导入。host-project的package.json中依赖配置为:
"my-node-module": "git+ssh://git@github.com:foo/my-node-module"
my-node-module以TypeScript编写,希望在宿主项目中导入它,有以下两个问题:
问题1:能否直接导入src/index.ts,还是转译步骤必须?
转译步骤是必须的,没办法直接通过import myModule from 'my-node-module'导入src/index.ts文件,原因如下:
- Node.js本身不支持直接运行TypeScript文件,必须先转译为JavaScript才能执行;
my-node-module的package.json指定主入口为js/index.js,Node会优先读取这个配置加载模块,不会自动查找src目录下的TS文件。
问题2:如何在宿主项目npm i时自动为my-node-module执行转译?
可以通过npm的钩子脚本实现自动转译,具体操作如下:
- 在
my-node-module的package.json中添加prepare脚本:"scripts": { "tsc": "tsc", "prepare": "npm run tsc" }prepare是npm内置的钩子,当模块被安装(包括通过Git URL安装)时会自动执行该脚本,触发TypeScript转译。 - 确保
my-node-module的package.json配置types字段,指向生成的类型定义文件,让宿主项目的TypeScript能识别模块类型:"types": "js/index.d.ts" - 同时要在
my-node-module的tsconfig.json中开启declaration: true,这样转译时会同步生成类型定义文件。
内容的提问来源于stack exchange,提问作者HelloWorld
相关产品推荐
相关产品推荐

