如何将TypeScript代码和JS库合并到一个带有源映射的文件中
How to combine TypeScript code and JS libraries into one file with source maps?
我可以成功地将我的TypeScript项目编译成一个带有源映射的JS文件,使用如下代码:
tsc --sourcemap --out app.js app.ts
我还可以使用UglifyJS成功地缩小输出,同时保持源映射完整:
uglifyjs app.js --source-map app.js.map --in-source-map app.js.map -o app.js
然而,我想再深入一点。我想把我编译的TypeScript代码(app.js
)和几个第三方JS库合并成一个小文件,这个小文件维护指向原始TypeScript(我的代码)或JavaScript(第三方库)的源映射。
我尝试了这样的东西,基本上只是添加一个JS库文件到UglifyJS的输入:
uglifyjs app.js lib/javascript-library.js --source-map app.js.map --in-source-map app.js.map -o app.js
不幸的是,这似乎不起作用。它确实成功地将所有内容合并到一个文件中,TypeScript代码的源映射似乎也被保留了下来。但是当我在lib/javascript-library.js
中输入错误时,浏览器中的JS控制台(使用源映射)说错误在我的一个TypeScript文件中,这显然是错误的。
我是一个TypeScript新手,我无法想象我是第一个想要将TS输出与随机JS库结合在一个带有源映射的小型文件中的人,但我找不到任何人谈论它。所以也许我的方法是完全错误的?
Typescript编译器不是那么聪明,要做到这一点,你需要使用更专门的工具。例子:gulpjs。
需求(如果你知道gulpjs,跳过这个):
- 安装nodejs
- 运行this:
npm install -g typescript gulp
安装gulp taskrunner - 在项目目录下,运行
npm init
并按照说明创建package.json - 运行:
npm install gulp gulp-typescript gulp-concat gulp-uglify gulp-sourcemaps --save-dev
安装ts编译,concat,丑化和生成源码地图工具 - 创建名为gulpfile.js的文件
在gulpfile.js中定义'compile'任务:
var gulp = require('gulp');
var ts = require('gulp-typescript');
var concat = require('gulp-concat');
var sourcemaps = require('gulp-sourcemaps');
var uglify = require('gulp-uglify');
gulp.task('compile', function() {
var tsResult = gulp.src('app.ts')
.pipe(sourcemaps.init()) // This means sourcemaps will be generated
.pipe(ts({
sortOutput: true,
// ...
}));
return tsResult
.pipe(concat('lib/js-library.js')) // You can use other plugins that also support gulp-sourcemaps
.pipe(uglify())
.pipe(sourcemaps.write()) // Now the sourcemaps are added to the .js file
.pipe(gulp.dest('release/'));
});
现在,运行gulp compile
,看看它的魔力!
学习此包并构建您的自定义任务compile。
相关文章:
- 如何在android中使用phonegap将文件从一个文件夹移动/复制到另一个文件夹
- 如何在elfinder插件(一个文件管理器插件)上获得上传前事件
- Sails.js:同时发布文本输入和一个文件
- 正在传递JSONP标头's数据参数到另一个文件中的AJAX请求
- 要求定义另一个文件中的对象
- 是否可以使用JavaScript/AAJAX在客户端创建一个文件
- 如何将所有JS文件连接到一个文件夹中
- 请求准备一个文件并返回路径,允许用户在准备好时下载
- 从AngularJS中的另一个文件中的控制器访问服务
- 将任何CDN配置为只传递一个文件,无论请求的url是什么
- 通过AngularJS promise下载一个文件
- Grunt-将多个文件最小化/处理为一个文件
- 文件的节点自动化移动到另一个文件夹中
- 用于文件移动到另一个文件夹的Javascript自动化
- 需要从一个文件中获取多个模块
- 仅首先需要使用jasmine从节点添加一个文件
- jQuery Mobile样式从另一个文件加载内容
- 最小化CSS/JS文件,并使用命令行创建一个文件
- 我如何制作一个文件的副本并用gump将其移动到父文件夹
- 为什么当我上传文件并点击更多上传另一个文件的第一个删除