【发布时间】:2014-03-20 02:24:55
【问题描述】:
我正在尝试浏览 Rendr 应用程序。我尝试了多种方法都没有成功。
这是我尝试使用 Gulp-browserify 的一个版本(现在不推荐使用普通的 browserify)。
gulp.task('browserify-gulp', function() {
gulp.src(['app/**/*.js'])
.pipe(gulpbrowserify())
.pipe(concat('mergedGulp.js'))
.pipe(gulp.dest('public/'));
});
这个错误了
Error: module "app/router" not found from rendr_project/node_modules/rendr/shared/app.js"
这是一种使用现有 Browserify 和vinyl-source-stream 的不同方法。这给了我同样的错误。
gulp.task('browserify', function() {
var bundle = browserify( './app/app.js' ).bundle();
return bundle.pipe(source( 'mergedAssets.js' )).pipe(gulp.dest('public/'));
});
.../shared/app.js 中导致此行为的行是
if (!isServer) {
ClientRouter = require('app/router');// <---here
Backbone.$ = window.$ || require('jquery');
}
任何指导将不胜感激。
作为参考,这里是使用 Grunt 和 Grunt-Browserify 完成的相同任务。
browserify: {
options: {
debug: true,
alias: [
'node_modules/rendr-handlebars/index.js:rendr-handlebars'
],
aliasMappings: [
{
cwd: 'app/',
src: ['**/*.js'],
dest: 'app/'
}
],
shim: {
jquery: {
path: 'assets/vendor/jquery.js',
exports: '$'
}
}
},
app: {
src: [ 'app/**/*.js' ],
dest: 'public/mergedAssets.js'
}
}
});
这很好用,但我想将所有内容都转移到 gulp 中,这看起来更直观。
编辑:
我找到了使用 gulp-browserify 的解决方法。
gulp.src(['app/**/*.js'])
.pipe(browserify({
insertGlobals: true,
debug: !gulp.env.production
}).on('prebundle', function(bundler) {
bundler.require( __dirname + '/app/router', {expose: 'app/router'} );
bundler.require( __dirname + '/app/views/base', {expose: '../base'});
}))
.pipe(concat('mergedAssets.js'))
.pipe(gulp.dest('public/'));
编译后,应用程序似乎正在运行,但文件输出似乎已经膨胀到超过 8 mb,而使用 grunt-browserify 编译的文件稳定在 1.5 mb。我还在浏览器控制台中看到未找到某些模块的错误。另一个缺点是 gulp-browserify 被列入黑名单。而且 browserify 似乎不支持 'prebundle' 事件。
您还可以看到我的应用程序中需要两个文件。目前共有6个文件。我想随着应用程序变得复杂,我将不得不手动要求更多文件。
AliasMapping 确实是 Browserify 非常需要的功能。希望有人知道一种仅使用 Browserify 即可实现此功能的方法。
【问题讨论】:
标签: browserify gulp rendr