在browserify-handbook exclude part中,它给出了使用exclude:
的示例$ npm install jquery
$ browserify -r jquery --standalone jquery > jquery-bundle.js
然后我们想在main.js中要求(' jquery'):
var $ = require('jquery');
$(window).click(function () { document.body.bgColor = 'red' });
推迟到jquery dist bundle,以便我们可以写:
<script src="jquery-bundle.js"></script>
<script src="bundle.js"></script>
并没有在bundle.js中显示jquery定义,然后在编译main.js时,你可以--exclude jquery:
browserify main.js --exclude jquery > bundle.js
但是当我尝试运行此示例时,我收到错误&#34;未捕获错误:无法找到模块&#39; jquery&#39;&#34;
我知道如果我使用独立,我可以使用&#39; jquery&#39; 作为全局变量,但它不是模块化的,所以我仍然想做样本使用&#34;要求(&#39; jquery&#39;)&#34;,那么,我该怎么做才能实现它?
答案 0 :(得分:6)
我终于使用此处的信息来使用此功能:
https://truongtx.me/2014/03/20/browserify-bring-nodejs-modules-to-browser/
我想知道你找到的文件现在已经过时了......
上述链接中的工作解决方案使用 &#39; -x&#39;选项(&#39;外部&#39;)而不是&#39; -u&#39;选项(&#39;排除&#39;)
链接文章还演示了如何使用gulp进行设置。
我粘贴了上述链接网站的相关内容:
$ browserify -r foo.js > foo-out.js
$ browserify -r d3-browserify > d3-browserify-out.js
对于main.js
$ browserify -x ./foo.js -x d3-browserify main.js > main-bundle.js
在浏览器中,您需要包含所有这3个文件
<script src="foo-out.js"></script>
<script src="d3-browserify-out.js"></script>
<script src="main-bundle.js"></script>
更新:我发布的链接似乎不起作用,所以我包括我当前的gulpfile.js。我是gulp和javascript的新手,所以可能有更好的方法来做这些事情。但是这个当前的设置基本上可以工作:
var browserify = require('browserify');
var gulp = require('gulp');
var watchify = require('watchify');
var source = require('vinyl-source-stream');
var buffer = require('vinyl-buffer');
var jshint = require('gulp-jshint');
var uglify = require('gulp-uglify');
var sourcemaps = require('gulp-sourcemaps');
var gutil = require('gulp-util');
var del = require('del');
const PATH_OPTS = {
src_dir: './client/js/src/',
main_file_path: './client/js/src/main.js',
output_file_name: 'disco.js',
output_dir: './public/js/',
common_lib_file_name: 'common.js'
};
const LIBS = ['paper', 'jquery', 'tocktimer'];
gulp.task("clientlib", function() {
var bundler = browserify({
debug: false
});
LIBS.forEach(function(lib) {
bundler.require(lib);
});
bundler.bundle()
.pipe(source(PATH_OPTS.common_lib_file_name))
// uglify seems to need a buffered stream...
.pipe(buffer())
.pipe(uglify())
.on('error', gutil.log)
.pipe(gulp.dest(PATH_OPTS.output_dir));
});
gulp.task('client', function () {
var bundler = browserify({
debug: true,
cache: {},
packageCache: {},
fullPaths: true
});
bundler = watchify(bundler);
bundler.on('update', function(){
bundle(bundler);
});
bundler.on('log', function(msg) {
gutil.log(msg);
});
bundler.add(PATH_OPTS.main_file_path);
LIBS.forEach(function(lib) {
bundler.external(require.resolve(lib, { expose: lib }));
});
return bundle(bundler);
});
function bundle(bundler) {
return bundler.bundle()
.pipe(source(PATH_OPTS.output_file_name))
.pipe(buffer())
.pipe(sourcemaps.init({loadMaps: true}))
// Add transformation tasks to the pipeline here.
.pipe(uglify())
.on('error', gutil.log)
.pipe(sourcemaps.write('./'))
.pipe(gulp.dest(PATH_OPTS.output_dir));
}
gulp.task('lint', function() {
return gulp.src(PATH_OPTS.src_dir + '*.js')
.pipe(jshint())
.pipe(jshint.reporter('default'));
});
gulp.task('clean', function () {
return del([
PATH_OPTS.output_dir + '/*.*'
]);
});
gulp.task('full', ['lint', 'clean', 'clientlib', 'client']);
gulp.task('default', ['lint', 'client']);