我正在使用grunt-browserify并特别遇到两个问题。使用以下配置选项成功启动并运行任务。变量jsFilesToConcat
代表Backbone.js + Marionette.js应用程序的所有JavaScript文件,主应用程序定义,前端实用程序资产(例如Bootstrap插件)以及与项目相关的所有JS。这是错误的方法?这个想法是一次加载整个250k JS应用程序(以及它的所有依赖项)。Backbone.Marionette - Grunt Browserify - “require is not defined”
我想提供的声明,这对我来说是一个新的领域,所以我觉得我的预期使用情况下可与已经可用插件的选项,但我的两个错误很困惑:
1 )Backbone not defined
- 这意味着脚本实际上正在加载,但是,当我在Chrome Dev Tools中检查调用堆栈时,它只显示匿名自调用函数。所以我不清楚如何将Backbone对象传递给Marionette,以便在加载时进行扩展。
2)require is not defined
- 我声明的线路错误var SampleApp = require('SampleApp')
。我需要在我的grunt配置中做些特别的事情,或者需要在node.js server.js配置文件中公开require
函数?
3)javascript本身是异步执行的,这是我不能正确处理的browserify预期行为的一部分吗?我认为,因为我在全局包装中包装了很多JS实用程序来保护名称空间,这就是某些函数不可用的原因,但我不清楚为什么会影响require
。
// uses grunt-browserify task
browserify: {
developmentJs: {
options: {
debug: true,
alias: ["./js/app.dev.js:SampleApp"],
},
src: [
'<%= pkg.jsFilesToConcat %>'
],
dest: 'public-dev/js/app.dev.js'
}
}
,然后在我的单页木偶应用的index.html
,我有。
(function ($) {
$(document).ready(function() {
var sampleApp = require('SampleApp');
console.log(SampleApp);
});
})(jQuery);
在配置中有一个别名应该使得require()暴露AFAIK。你看看生成的'public-dev/js/app.dev.js'文件吗?另外,为了确保你在index.html中正确包含了public-dev/js/app.dev.js? –
@AmitayDobo我认为是一样的,但我遇到了同样的问题,需要不被全局定义 – pixshatterer