TypeStrong / tsify

Browserify plugin for compiling TypeScript
344 stars 75 forks source link

Any plan to support --incremental flag? #249

Open dharijanto opened 5 years ago

dharijanto commented 5 years ago

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) :)

cartant commented 5 years ago

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.

ericmorand commented 5 years ago

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.

cartant commented 5 years ago

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.

ericmorand commented 5 years ago

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.

cartant commented 5 years ago

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.

cartant commented 5 years ago

@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:

ericmorand commented 5 years ago

I finally had the chance to perform a simple test.

I have a simple TS project that consists of two files:

}


* 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.
ericmorand commented 5 years ago

I also confirm that Host.prototype.writeFile never attemps to write the build info file .foo.

ericmorand commented 5 years ago

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?

cartant commented 5 years ago

Yep. Probably worth having a look at - or keeping an eye on - https://github.com/TypeStrong/ts-loader/pull/935 too.

jleider commented 5 years ago

Looks like there has been some progress made regarding an api: https://github.com/microsoft/TypeScript/pull/31432