Compile typescript project as local module

。_饼干妹妹 提交于 2021-01-27 21:11:27

问题


tl;dr

Can I have typescript compile different folders as separate libraries, and import the results like a node module?


For example, I have a common folder with 800 files, and then a few app folders (app1, app2, etc) each with 20+/- files. All of the app folders have references to classes/interfaces/etc inside of the common folder. The problem is that whenever I compile an app folder it also compiles all 800 of the common files. This compilation takes too long and I'd really like to avoid it.

I have tested and confirmed this using tsc --diagnostics --listFiles in both common and app1.

I've tried using the exclude property in tsconfig.json to ignore the common folder, but it seems to have no effect. I've also tried multiple configurations of baseDir, paths, etc. within the compilerSettings, but to no avail.

noResolve seems to almost achieve what I am looking for, but is that safe??

Is there a way to compile them separately and avoid recompiling the independent common project all the time?


Tech Stack:

  • Angular 2.0.1
  • SystemJS 0.19.39
  • Typescript 2.0.3
  • Windows 8.1
  • ASP.NET MVC6

回答1:


Separate your common folder into a different project call common, and make it into a node.js modules, instruction here:

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

Then in your original project, you do following:

Method 1

npm link <folder path of common>

Method 2

npm install <folder path of common> --save

Method 1 is easier to use as update to common is automatically reflected in the main project and don't have to worry about updating.

Method 2 is good if you plan to later publish it as a standalone npm package. However update to common will require manual update step in the main project.

In your common folder, make sure you create a .npmignore file. Let say your common project have following structure:

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

then your .npmignore should look like following:

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

You can check out my ng2-simple-mq as an example.



来源:https://stackoverflow.com/questions/39858993/compile-typescript-project-as-local-module

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!