在 gulp browserify 中混合 javascript 和打字稿

Mixing javascript and typescript in gulp browserify

我有很好的 gulp browserify 工作流程 javascript 和现在的打字稿。这些将源文件与模块组合在一起,并生成一个 .js 文件以供在浏览器中使用。

但是,由于有一个较旧的 javascript 项目,我现在想使用 typescript 引入新功能 - 无需将所有内容都转换为 typescript。

理想情况下,我希望 browserify 检测并预编译 ts 和 tsx,并在 browserifying 之前将结果与 js 文件一起传递给 babel:

function compileBrowserify(file, folder, watch, typescript) {
    // cache and packageCache is required for watchify to perform, debug produces sourcemaps. })
    var bundlerRaw = browserify(file, { debug: true, cache: {}, packageCache: {}}) 
    var bundler = watch ? watchify(bundlerRaw) : bundlerRaw

    bundler = typescript ? bundler.plugin(tsify, { noImplicitAny: false,  jsx: 'react', moduleResolution: 'node', target: 'ES6'}) : bundler
    bundler.transform(babelify.configure({
        presets: ['react', 'es2015', 'stage-0'],
        }))

    var rebundle = function() {
        return bundler
            .bundle()
            .on('error', function(err) { console.error(err.toString()); this.emit('end'); })
            .on('end', function() { console.log('Done browserifying'); })
            .pipe(source("app/main.js"))
            .pipe(buffer())
            .pipe(sourcemaps.init({ loadMaps: true }))
            .pipe(sourcemaps.write('./'))
            .pipe(gulp.dest(folder));
    }
    bundler.on('update', rebundle)
    return rebundle()
}

此设置实际上编译并适用于 js 部分,但我的打字稿文件未捆绑。 是否可以通过这种方式将打字稿文件添加到现有的 javascript 项目中?

注意:我目前正在添加一个 React tsx 文件,但假设常规 ts 文件的情况相同。

注意:我曾尝试手动 "add()" 将 tsx 文件添加到 browserify 包中,但没有寄予厚望或结果。

注意:tsx 已编译,至少它因错误而无法构建,只是没有放入包中。

抱歉,上面的代码确实有效。我从 tsx 文件中丢失了正确的 exports,browserify/tsify 一定发现没有任何有用的输出。

无论如何,这个设置能正常工作真是太棒了。它使继续构建 javascript 项目变得非常容易 - 使用打字稿的力量。