I have this setup of a TypeScript 2.0.3 project:
src/main/webapp/tsconfig.json
src/main/webapp/app -- contains .ts files
src/main/webapp/app/tsModels -- a symlink to ../../../../target/tsModels
target/tsModels/ -- contains .ts files
The goal is to get the .ts files in target/tsModels
compiled.
First, with "rootDir": "."
, tsc
complained:
error TS6059: File '[...]/target/tsModels/AboutWindupModel.ts' is not under 'rootDir' '[...]/src/main/webapp'. 'rootDir' is expected to contain all source files.
So I tried
{
"compilerOptions": { ...,
//"rootDir": ".",
"rootDirs": [".", "../../../target/tsModels"],
},
}
Still the same. Tried:
{
"compilerOptions": {
//"rootDir": ".",
"rootDirs": [".", "../../../target/tsModels"],
},
"exclude": [
"node_modules",
"target/**",
"../../../target/**",
"../../../target/**/*",
"../../../target/tsModels/*",
"typings/main",
"typings/main.d.ts"
]
}
But still getting that error.
So it seems that tsc
can't handle symlinks properly, always checks the canonical path.
So I thought, ok let's compile the tsModels
files directly. So I removed the symlink and tried:
"compilerOptions": {
//"rootDir": ".",
"rootDirs": [".", "../../../target/tsModels"],
},
But this doesn't actually compile the files in the tsModels
dir.
I have even tried
"rootDirs": "../../../target/tsModels",
but tsc
didn't compile that, instead, it compiled the .
. Does it obey that at all?
What should I do to compile files from both dirs?
Is there a way to use a symlink leading to dir outside rootDir
?
Full config with all the garbage I was trying:
{
"compilerOptions": {
"target": "es5",
"module": "system",
"moduleResolution": "node",
"sourceMap": true,
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"removeComments": false,
"noImplicitAny": false,
//"rootDir": ".",
//"rootDirs": [".", "../../../target/tsModels"],
"rootDirs": ["../../../target/tsModels"],
//"rootDir": "../../../target/tsModels",
"outDir": "../../../target/windup-web",
"sourceRoot": "/windup-web/"
},
"exclude": [
"node_modules",
//"target/**",
//"../../../target/**",
//"../../../target/**/*",
//"../../../target/tsModels/*",
//"target/tsModels/**",
"typings/main",
"typings/main.d.ts"
]
}
I think the preserveSymlinks
compiler option could help you:
Do not resolve symlinks to their real path; treat a symlinked file like a real one.
https://www.typescriptlang.org/docs/handbook/compiler-options.html
Example:
{
"compilerOptions": {
"preserveSymlinks": true
}
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With