将打字稿项目编译为本地模块

Compile typescript project as local module

tl;博士

我可以让 typescript 将不同的文件夹编译为单独的库,然后像节点模块一样导入结果吗?


例如,我有一个包含 800 个文件的 common 文件夹,然后是几个 app 文件夹(app1app2 等),每个文件夹包含 20+ /- 文件。所有 app 文件夹都引用了 common 文件夹内的 classes/interfaces/etc。问题是,每当我编译一个 app 文件夹时,它也会编译所有 800 个 common 文件。这个编译时间太长了,我真的很想避免它。

我已经在 commonapp1 中使用 tsc --diagnostics --listFiles 测试并确认了这一点。

我试过在tsconfig.json中使用exclude属性来忽略common文件夹,但是好像没有效果。我也在compilerSettings中尝试了baseDirpaths等多种配置,但都无济于事。

noResolve 似乎几乎达到了我的要求,但是这样安全吗??

有没有办法将它们分开编译,避免一直重新编译独立的common项目?


技术堆栈:

将您的公共文件夹分离到不同的项目调用 common,并使其成为 node.js 模块,此处说明:

https://docs.npmjs.com/getting-started/creating-node-modules

然后在您的原始项目中,您执行以下操作:

方法一

npm link <folder path of common>

方法二

npm install <folder path of common> --save

方法 1 更易于使用,因为对 common 的更新会自动反映在主项目中,无需担心更新。

如果您打算稍后将其发布为独立的 npm 包,则方法 2 很好。但是更新到 common 需要在主项目中手动更新步骤。

在您的 common 文件夹中,确保创建一个 .npmignore 文件。假设您的 common 项目具有以下结构:

.                                                                                                                                                               
├── index.d.ts
├── index.js                                                                                                                                                    
├── lib/  <--- compiled location                                                                                                                               
├── node_modules                                                                                                                                                
├── package.json                                                                                                                                                
├── src/                                                                                                                                                         
├── tsconfig.json                                                                                                                                               
├── typings                                                                                                                                                     
└── typings.json

那么您的 .npmignore 应该如下所示:

.DS_Store
.git
.gitignore
examples
node_modules
npm-debug.log
src
tsconfig.json
typings
typings.json

你可以看看我的ng2-simple-mq作为例子。