Good day everyone.
I try to build my web project with Gulp. I want use TypeScript and I want ruling dependencies with browserify.
But I have some trouble with it.
I use next code for build:
var path = {
build: {
js: 'build/js/',
},
src: {
ts: './src/ts/*.ts',
},
};
gulp.task("ts:build", function(){
glob(path.src.ts, {}, function(err, files){
var b = browserify({
cache: {},
packageCache: {},
debug: true
});
_.forEach(files, function(file){
b.add(file);
});
b.plugin('tsify', { noImplicitAny: true })
.bundle()
.pipe(source('app.js'))
.pipe(gulp.dest(path.build.js))
});
});
});
I can't understand how I must declare dependencies. For example, I have two *.ts file: main.ts and someclass.ts. In someclass.ts I write some class:
class SomeClass {
// bla-bla-bla
}
export = SomeClass;
And I want to use this class in main.ts. I try this with browserify:
var settingsPanel = require("./someclass");
gulp build have worked correctly, but in browser console I see
node_modules\browserify\node_modules\browser-pack_prelude.js:1Uncaught Error: Cannot find module './someclass';
I will be very helpfull for any advice about this. Especially for link on some code example with gulp+browserify+typescript.
I'm just working on a really similar build at the moment.
In my build, I have one task for compilation from TS to JS using commonjs
modules. In your gulpfile.js
, when you compile your TS into JS you need to indicate to the compiler to use commonjs
modules:
var tsProject = ts.createProject({
removeComments : true,
noImplicitAny : true,
target : 'ES3',
module : 'commonjs', // !IMPORTANT
declarationFiles : true
});
I have a second task which indicates the application JS entry point (main.js
) to Browserify and it will then generate the bundle file, uglify it and generate source maps.
My main.ts file contains the folowing:
///<reference path="./references.d.ts" />
import headerView = require('./header_view');
import footerView = require('./footer_view');
import loadingView = require('./loading_view');
headerView.render({});
footerView.render({});
loadingView.render({});
My gulpfile.js looks like this (please note I only copied the relevant parts here)
// ....
var paths = {
ts : './source/ts/**/**.ts',
jsDest : './temp/js/',
dtsDest : './temp/definitions/',
scss : './source/scss/**/**.scss',
scssDest : './temp/css/',
jsEntryPoint : './temp/js/main.js',
bowerComponents : './bower_components',
nodeModules : 'node_modules',
temp : './temp',
dist : './dist/'
};
var tsProject = ts.createProject({
removeComments : true,
noImplicitAny : true,
target : 'ES3',
module : 'commonjs',
declarationFiles : true
});
// Build typescript
gulp.task('tsc', function(){
var tsResult = gulp.src(paths.ts).pipe(ts(tsProject));
tsResult.dts.pipe(gulp.dest(paths.dtsDest));
tsResult.js.pipe(gulp.dest(paths.jsDest));
});
// Browserify, uglify and sourcemaps
gulp.task('minify-js', function () {
// transform regular node stream to gulp (buffered vinyl) stream
var browserified = transform(function(filename) {
var b = browserify({ entries: filename, debug: true });
return b.bundle();
});
return gulp.src(paths.jsEntryPoint)
.pipe(browserified)
.pipe(sourcemaps.init({ loadMaps: true }))
.pipe(uglify())
.pipe(sourcemaps.write('./'))
.pipe(gulp.dest(paths.dist));
});
// ....
The full source code (work in progress) is available at https://github.com/remojansen/modern-workflow-demo
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With