问题
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