我使用BrunchJS來處理咖啡腳本和資產編譯。 該項目使用多個Brunch插件,如需要「commonjs」包裝器操作的brunch-handlebar。從我config.coffeeMarionette JS模塊,Brunch JS和需要JS項目結構
modules:
# We cant avoid require js wrapping since brunch modules use commonjs
# Otherwise Marionnette JS offers its own modules loading strategy
# loading mechanism
wrapper: "commonjs"
definition: "commonjs"
在木偶側
提取物,我可以有一個簡單的應用程序加載就好了。
的index.html
<script type="text/javascript">
var app = require('application');
app.initialize()
</script>
application.coffee
#裝載車把阻止 需要 '的lib/view_helper'
class Application extends Backbone.Marionette.Application
initialize: =>
@addInitializer((options) =>
console.log "HELLO WORLD"
AppLayout = require 'views/app_layout'
@layout = new AppLayout()
@layout.render()
)
@start()
# module.exports is the object that's actually returned as the result of
# a require call.
module.exports = new Application()
從那裏開始助手我該怎麼辦使用Marionette JS模塊?我在這裏閱讀了關於在這裏使用AMD的模塊https://github.com/marionettejs/backbone.marionette/wiki/AMD-Modules-vs-Marionette的模塊,但由於「定義」和「要求」沒有公開,所以我不能在我的木偶模塊定義中使用定義關鍵字。 Brunch只使用它來加載它的插件和我的應用程序源文件。
一個平常木偶模塊如下所示:
MyApp = new Backbone.Marionette.Application();
MyApp.module("Foo", function(){
// module code goes here
});
MyApp.start();
在一個單獨的文件moduleA.coffee我試圖做的:
MyApp = require 'application'
define ["MyApp", "Marionette"], (MyApp, Marionette) ->
MyModule = MyApp.module("MyModule")
MyModule.addInitializer ->
console.log "HELLO FROM MODULE"
MyModule
但定義沒有定義。
我也試圖做的事:
MyApp = require 'application'
MyApp.module "ModuleA", (MyApp, ModuleA, Backbone, Marionette, $, _) ->
ModuleA.addInitializer ->
console.log "HELLO FROM MODULE"
但後來我需要需要application.coffee我所有的提線木偶模塊(「moduleA」),並遇到了一些循環依賴的問題。
我想到的解決方案之一是禁用BrunchJS commonjs從供應商文件夾中包裝和加載把手而不是作爲早午餐插件。
你有沒有設置你require.config?我不確定coffeeScript,但我可以給你一個js例子。 –
不,因爲我相信早午餐是爲我們做的嗎?我會試一試。 – coulix
這是可能的,我也不確定早午餐。我使用require,骨幹牽線木偶,並沒有這個問題...所以可能值得檢查。 –