tsify
tsify copied to clipboard
Any plan to support --incremental flag?
Hello, First off, thanks for this wonderful open source project. I've been regularly using this with browserify :)
Since typescript 3.4 introduced --incremental (see: https://www.typescriptlang.org/docs/handbook/release-notes/typescript-3-4.html), is there a plan to support the flag on tsify library? Seems it'd be nice not having to recompile everything when the build script is restarted (i.e. computer restart) :)
incremental is a compiler option, so if you specify a project file - i.e. a tsconfig.json file - when you run tsify, you can configure the option in the project file's compilerOptions. tsify will use the options specified in said file.
Can you show an example of usage? It doesn't seem to work when setup this way:
plugin: [
['tsify', {
project: {
compilerOptions: {
incremental: true
}
}
}]
]
tsBuildInfoFile is not created and the build is not faster than without the incremental flag.
I guess it doesn't work because tsify passes its own compiler host to TypeScript - to abstract the file system - as the compiled files need to be made available to Browserify via streams.
I don't have time to look into this, ATM, but if it's something you'd be interested in looking into, I can give you some pointers regarding where to start in this codebase.
With great pleasure. I've been digging into source code yesterday and will continue today. I'll let you know if I need help with it.
Cool, I'll write up some pointers tonight - in about 6 hours or so.
The main thing will be to switch debugging on and checkout the logs - to see if TypeScript is using the compiler host's API to write the intermediate data.
@ericmorand I'd forgotten that I'd written an outline of the codebase. You should start with that. It's here.
Once you've familiarised yourself with that, this is what I'd do:
- Create a simple example that works with the
incrementalflag when using the command line. - Get the example working with tsify.
- Enable debug logging.
- Look to see if TS attempts to write
incrementalinformation to the file system in this call. - If it does, look at adding some special case handling of file names to ensure the data is written to the file system.
I finally had the chance to perform a simple test.
I have a simple TS project that consists of two files:
- index.ts
class Foo {
}
- tsconfig.json
{
"compilerOptions": {
"module": "commonjs",
"target": "es5",
"sourceMap": true,
"incremental": true,
"tsBuildInfoFile": ".foo"
},
"exclude": [
"../node_modules"
]
}
When I run tsc, I successfully obtain a .foo file which means incremental is working.
When I run npx browserify index.ts -p tsify, I don't get a .foo file which means incrmental is not working.
When I run npx browserify index.ts -p [tsify {incremental: true, tsBuildInfoFile: ".foo"}], I don't get it either.
I continue my investigations.
I also confirm that Host.prototype.writeFile never attemps to write the build info file .foo.
I think the issue is related to:
https://github.com/microsoft/TypeScript/issues/29978
ts-loader guys seems to be stuck at the same point than tsify:
https://github.com/TypeStrong/ts-loader/issues/913
What di you think?
Yep. Probably worth having a look at - or keeping an eye on - https://github.com/TypeStrong/ts-loader/pull/935 too.
Looks like there has been some progress made regarding an api: https://github.com/microsoft/TypeScript/pull/31432