将打字稿缩小为一个JS文件,使用gulp保持源映射工作

Minify typescript into one JS file, keep the sourcemaps working using gulp

本文关键字:gulp 使用 文件 工作 映射 JS 一个 缩小 小为      更新时间:2023-09-26

我已经在网上爬遍了这个。

我考虑过使用 --out,但有一篇巨大的文章 https://github.com/TypeStrong/atom-typescript/blob/master/docs/out.md 说明为什么这是一个坏主意。

它说

-

-out实际上是一些构建工具的工作。

但是,并没有比这更进一步。因此,到目前为止,我有以下过程:

  1. 在打字稿上掉牙
  2. 编译打字稿
  3. 构建源映射
  4. 将编译的打字稿通过管道传输到另一个目录(构建)
  5. 将所有 bower deps 添加到索引.html文件
  6. Serve index.html,指向 appEntryPoint.js,即只是一个JS文件,在其余部分调用一些东西项目。

转译文件中的第一行是:appEntryPoint.js:

define(["require", "exports", "./example"], function (require, exports, example_1) {

我得到:"未捕获的引用错误,未定义定义"。我尝试添加require-js,以便在此文件之前加载它,但这也不起作用。

所以。我有哪些选择?

  1. 我可以强制打字稿只要求使用require并从其他文件中包含它需要的任何内容吗?
  2. 我可以将所有打字稿缩小到一个JS文件中,然后仍然让源映射工作吗?如果是这样,如何??

作为参考,这是我gulpfile.js

var gulp = require('gulp');
var tsc = require('gulp-typescript');
var tslint = require('gulp-tslint');
var config = require('./gulpfile.config')();
var sourcemaps = require('gulp-sourcemaps');
var browsersync = require('browser-sync');
var superstatic = require('superstatic');
var usemin = require("gulp-usemin");
var uglify = require("gulp-uglify");
var reload      = browsersync.reload;
var wiredep = require("wiredep").stream;
gulp.task('ts-lint', function(){
  return gulp.src(config.allTs)
    .pipe(tslint())
    .pipe(tslint.report('prose', {
      emitError : false
    }));
});
gulp.task('compile-ts', function(){
  var sourceTsFiles = [
    config.allTs,
    config.typings
  ];
  var tsResult = gulp
    .src(sourceTsFiles)
    .pipe(sourcemaps.init())
    .pipe(tsc({
        module: "amd",
        target: "ES5",
        declarationFiles: false,
        emitError: false,
        emitDecoratorMetadata: true,
      outDir : config.tsOutputPath
    }));
  return tsResult.js
    .pipe(sourcemaps.write('.'))
    .pipe(gulp.dest(config.tsOutputPath))
    .pipe(reload({stream:true}));
});
gulp.task('serve', ['ts-lint', 'compile-ts', 'bower'], function() {
    gulp.watch([config.allTs], ['ts-lint', 'compile-ts']);
    browsersync({
        port: 3000,
        files: ['index.html', '**/*.js'],
        injectChanges: true,
        logFileChanges: false,
        logLevel: 'silent',
        notify: true,
        reloadDelay: 0,
        server: {
            baseDir: config.browsersyncpath,
            middleware: superstatic({ debug: false})
        }
    });
});

gulp.task("bower", function () {
    gulp.src("index.html")
        .pipe(wiredep())
        .pipe(gulp.dest("build"));
});
// gulp.task("minify", function () {
//  return gulp.src("build/index.html")
//      .pipe(usemin({
//          assetsDir: config.tsOutputPath,
//          js: [uglify(), "concat"]
//  }))
//   .pipe(gulp.dest(config.tsOutputPath));
// });
gulp.task('default', ['serve']);

只需使用 gulp-concat 将所有*.js文件合并为一个。