【问题标题】:how to use the exclude in browserify?如何在browserify中使用排除?
【发布时间】:2015-12-15 02:12:37
【问题描述】:

在browserify-handbook,exclude part,它给出了一个使用排除的例子:

$ npm install jquery
$ browserify -r jquery --standalone jquery > jquery-bundle.js

然后我们只想在 main.js 中使用 require('jquery'):

var $ = require('jquery');
$(window).click(function () { document.body.bgColor = 'red' });

遵从 jquery dist 包以便我们可以编写:

<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

但是当我尝试运行这个示例时,我得到了一个错误“未捕获的错误:找不到模块'jquery'”

我知道如果我使用独立的,我可以使用 'jquery' 作为全局变量,但它不是模块化的,所以我仍然想使用 "require('jquery' )”,那么,我该怎么做才能实现呢?

【问题讨论】:

    标签: browserify


    【解决方案1】:

    我终于使用此处找到的信息使此功能正常工作:

    https://truongtx.me/2014/03/20/browserify-bring-nodejs-modules-to-browser/

    我想知道你找到的文档现在是否已经过时了......

    以上链接中的工作解决方案使用'-x'选项('external')而不是'-u'选项('exclude')

    链接的文章还演示了如何使用 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']);
    

    【讨论】:

    • 我刚刚尝试过,生成的文件看起来不错,但我在使用它时遇到问题,我得到未捕获的错误:找不到模块'react' 我在主应用程序上方列出了 react.js脚本
    • 我现在也可以通过使用供应商文件来完成这项工作(我错过了这一点)但是没有供应商文件它不会找到反应 - 使用供应商文件它会引发关于如何我不应该缩小反应。这太疯狂了!
    • 我最近没有研究这个,但这个解决方案现在似乎已经过时了。见truongtx.me/2015/11/03/…
    猜你喜欢
    • 2016-11-06
    • 1970-01-01
    • 2015-08-07
    • 2017-09-04
    • 2015-08-17
    • 2014-11-08
    • 2016-08-08
    • 1970-01-01
    • 2015-05-10
    相关资源
    最近更新 更多