【发布时间】:2016-11-03 07:02:41
【问题描述】:
我有一个 asp.net,我有一个 MVC 应用程序,我想在其中使用 TypeScript 添加一些客户端处理,并从 a.cshtml 文件中调用它(仅使用此页面中的纯 JavaScript)。我正在使用 Gulp 和 Browserify 进行捆绑
我有以下 gulp 文件
/*
Use gulp --production to minimize and skip source maps
This skips the bundling jquery , so need to include this before the bundle
*/
// Pass this to build in production
var PRODUCTION_ARG = "production";
// Itellisense related defines
var INTELLISENSE_SRC_FOLDER = "UserControls/Intellisense/src";
var INTELLISENSE_DEST_FOLDER = "UserControls/Intellisense/build";
var INTELLISENSE_BUNDLE_FILENAME = "intellisense-bundle.js";
var gulp = require('gulp');
var del = require('del');
var ts = require("gulp-typescript");
var tsProject = ts.createProject("tsconfig.json");
var browserify = require("browserify");
var source = require('vinyl-source-stream');
var tsify = require("tsify");
var uglify = require('gulp-uglify');
var buffer = require('vinyl-buffer');
var argv = require('yargs').argv;
gulpif = require('gulp-if');
gulp.task('intellisense-clean', function () {
return del([INTELLISENSE_DEST_FOLDER + '/**/*']);
});
gulp.task("intellisense-copy-html", function () {
return gulp.src(INTELLISENSE_SRC_FOLDER + "/*.html")
.pipe(gulp.dest(INTELLISENSE_DEST_FOLDER));
});
gulp.task("intellisense-copy-css", function () {
return gulp.src(INTELLISENSE_SRC_FOLDER + "/*.css")
.pipe(gulp.dest(INTELLISENSE_DEST_FOLDER));
});
gulp.task("build-intellisense", ["intellisense-clean", "intellisense-copy-html", "intellisense-copy-css"], function () {
return browserify({
basedir: '.',
debug: true,
standalone: 'ABC',
entries: [INTELLISENSE_SRC_FOLDER + '/intellinode.ts',
INTELLISENSE_SRC_FOLDER + '/code-description-pair.ts',
INTELLISENSE_SRC_FOLDER + '/console-logger.ts',
INTELLISENSE_SRC_FOLDER + '/intellisense-control.ts'],
cache: {},
packageCache: {},
})
.ignore('jquery')
.plugin(tsify)
.bundle()
.pipe(source(INTELLISENSE_BUNDLE_FILENAME))
.pipe(buffer())
.pipe(gulpif(argv.production, uglify()))
.pipe(gulp.dest(INTELLISENSE_DEST_FOLDER));
});
gulp.task("default", ["build-intellisense"], function () {
});
我的tsconfig.json如下..
{
"compilerOptions": {
"noImplicitAny": true,
"noEmitOnError": true,
"removeComments": false,
"sourceMap": true,
"target": "es3",
"module": "commonjs"
},
"target": "es3",
"files": [
"./UserControls/Intellisense/src/*.ts"
],
"exclude": [
"node_modules",
"wwwroot"
],
"compileOnSave": true
}
第一个奇怪的事情是我似乎需要将每个 ts 文件包含在 entries: 列表中以调用 browserify,否则我似乎只能获得输出包文件中包含的一个或两个类。
所以,包括它们似乎都可以工作(尽管想知道为什么需要它们,而不仅仅是“顶级”)。
下一个问题是我想从普通浏览器 JavaScript 中实例化和调用一些方法。从其他帖子中,我被告知我可以使用上面的standalone: 'Intellisense' 标志。然后添加一个全局对象“ABC”(我可以看到 int eh 调试器),但似乎只包含一个 TypeScript 类(实际上是条目列表中的最后一个)
我已将 tsconfig 模块更改为 amd,但出现其他错误(因此改回 commonjs)。
我真的不知道从这里去哪里。将 TypeScript 世界重新融入普通浏览器 JavaScript 世界似乎非常有限。
这里的任何帮助将不胜感激!
【问题讨论】:
-
Gulp 和 Browserify 是节点模块
-
但是“Browserify”一词的意思不是“为浏览器制作”吗?它确实有“独立”选项。是使用装载机的唯一选择吗?
标签: javascript typescript gulp browserify