tsify icon indicating copy to clipboard operation
tsify copied to clipboard

Any plan to support --incremental flag?

Open dharijanto opened this issue 6 years ago • 11 comments

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

dharijanto avatar Apr 06 '19 08:04 dharijanto

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.

cartant avatar Apr 06 '19 08:04 cartant

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.

ericmorand avatar May 06 '19 22:05 ericmorand

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.

cartant avatar May 06 '19 22:05 cartant

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.

ericmorand avatar May 07 '19 05:05 ericmorand

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 avatar May 07 '19 05:05 cartant

@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 incremental flag when using the command line.
  • Get the example working with tsify.
  • Enable debug logging.
  • Look to see if TS attempts to write incremental information 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.

cartant avatar May 07 '19 08:05 cartant

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.

ericmorand avatar May 10 '19 08:05 ericmorand

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

ericmorand avatar May 10 '19 08:05 ericmorand

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?

ericmorand avatar May 17 '19 17:05 ericmorand

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

cartant avatar May 17 '19 17:05 cartant

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

jleider avatar Jul 02 '19 16:07 jleider