javascript - 从我的页面/html 需要(并将值传递给)browserify 模块

标签 javascript requirejs gulp browserify

我正在将我的 requirejs + play 框架 Assets 管道转换为 gulp/browserify。到目前为止,这是一次很棒的旅程。然而,我遇到了一个重大障碍。

当我使用 requireJs 时,我可以在我的页面上执行类似的操作:

var pageSpecificConstant = @configJsonObj; //something my server gives me.
require(['jquery', 'unsubscribe'], function($,  unsubscribe) {
    $(function () {
        unsubscribe.init(pageSpecificConstant);
    });
});

基本上,我需要将一些页面级数据至少传递给某些模块。

现在使用 gulp/browserify(和 Factor 插件),我正在生成 2 个包:

<script src="js/bundles/unsubscribe.js"></script>
<script src="js/bundles/common.js"></script>

现在我想做一些像以前一样的事情:

var unsubscribe = require('unsubscribe'); //or require(path_to_unsubscribe.js file)

不幸的是,这对于 browserify 来说是不可能的。

我想知道我的选择是什么。我读到有关 browserify 的“独立”选项,但我并不完全清楚如何使用它,因为我生成了多个 bundle 。

这是我的 gulp 的 browserify 步骤(仍处于原型(prototype)阶段)

browserify: function() {
        var bundler = browserify(['./public/javascripts/unsubscribe.js', './public/javascripts/homepage.js'], {
            debug: !production,
            transform: [stringify({
                    extensions: ['.html', '.mustache', '.handlebars'],
                    minify: true,
                    minifier: {
                        extensions: ['.html', '.mustache', '.handlebars']       
                    }
                }),
                [browserifyCss, {
                    'autoInject': true,
                    'rootDir': './public/target/css'
                }]
            ],
            globals: true,
            cache: {}
        })

        var build = argv._.length ? argv._[0] === 'build' : false;
        if (watch) {
            bundler = watchify(bundler);
        }
        var rebundle = function() {
            return bundler
            .plugin(factorBundle, {
                //factor-bundle plugin
                // File output order must match entry order
                o: ['./public/target/javascripts/bundles/unsubscribe.js', './public/target/javascripts/bundles/homepage.js']
            })
            .bundle()
            .on('error', handleError('Browserify'))
            .pipe(source('common.js'))
            .pipe(gulpif(production, buffer()))
            .pipe(gulpif(production, uglify()))
            .pipe(gulpif(production, gzip()))
            .pipe(gulp.dest('./public/target/javascripts/bundles'));
        };
        bundler.on('update', rebundle);
        return rebundle();
    }

我只需要某种方法将值从页面传递到我的 browserify 模块。任何帮助将不胜感激。

谢谢

最佳答案

为了快速解决方案,我在入口点导出了应用程序,因此如果您的 /path/to/bootstrap.js 如下所示:

var app    = require("./app.js"),
    config = requrie("./config.js");

app.init(config)
   .run();

然后将入口点更改为文件/path/to/export.js,其中包含:

var app = require("./app.js");

window.app = app;

然后在页面中(我使用的是 PHP):

app.init(
    <?php echo json_encode($config); ?>
)
.run();

关于javascript - 从我的页面/html 需要(并将值传递给)browserify 模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29855289/

相关文章:

javascript - 如何等待来自 ajax() 成功数据的图像加载?

javascript - 如何使用 ian :accounts-ui-bootstrap-3? 根据 Meteor 中的用户输入设置配置文件字段值

typescript - RequireJS + Bootstrap 日期选择器 + 区域设置文件

firefox - Browsersync - 如何选择要运行的浏览器安装?

javascript - 我有一个 GULP 任务文件,用于使用 babelify 编译带有 JSX 代码的 js 文件,但无法使用它

javascript - 使用 jquery 捕获文档点击事件

javascript - JQuery UI 选项卡 : Add tab at the second position

javascript - 我该如何解决这个 AMD 路径冲突?

backbone.js - 如何解决同一页面上的 browserify(基于 Backbone 的应用程序)和 require.js 之间的冲突?

javascript - 将 PHP 应用程序编译为具有变体的 HTML