Categories
通風報信

Upgrade to RequireJS 2.0 and almond 0.1

前陣子RequireJS升級到2.0了,所以來記述一下相關的做法。
由更新說明文件 Upgrading to RequireJS 2.0 上可以知道,2.0版最重大的變化就是 shim 這項設定,大大提升引入不支援AMD定義的模組方便性,以下開始講解前篇文章的範例該如何做升級修改。

首先來看 main.js:

require({
  paths: {
    jquery: 'lib/jquery-1.7.2.min',
    underscore: 'lib/underscore-min',
    backbone: 'lib/backbone-min',
    templates: '../templates'
  },
  shim: {
    'backbone': {
      deps: ['underscore', 'jquery'],
      exports: 'Backbone'
    },
    'lib/jquery.serialize': ['jquery']
  }
}, [
  'app',
  'lib/jquery.serialize'
  ], function(
    App
  ) {
    App.start();
});

原先的 priority 設定被 shim 給取代,且可以直接引入原版不支援AMD的Backbone與Underscore程式檔案,jQuery外掛則可以照此例簡單設定相依性,這樣在App引用 jquery.serialize 時就會先引入 jQuery 並放到Global Namespace。

再來看 app.js:

define([
  'router'
], function(
  Router
) {
  'use strict';
  var App = {};
  App.start = function() {
    App.router = new Router;
    Backbone.history.start();
  };
  return App;
});

基本上沒變,因為現在Backbone在 router.js 裡被引入時會放到Global Namespace,拿掉了之前多餘的Backbone引用。

最後輪到 build.js:

{
    baseUrl: 'javascript',
    name: 'almond',
    include: ['main'],
    insertRequire: ['main'],
    out: 'scripts/script.js',
    paths: {
      jquery: 'lib/jquery-1.7.2.min',
      underscore: 'lib/underscore-min',
      backbone: 'lib/backbone-min',
      templates: '../templates'
    },
    shim: {
    'backbone': {
      deps: ['underscore', 'jquery'],
      exports: 'Backbone'
    },
    'lib/jquery.serialize': ['jquery']
  }
}

最大的重點就是別忘了把 shim 的設定也加到這裡來。
另外這裡的寫法和前篇處理整個專案資料夾不同,是配合使用 almond.js 來輸出單一打包檔,除了也得更新 almond.js 外,還得加上 insertRequire 設定,詳情請見 almond.js 頁面上的說明。

One reply on “Upgrade to RequireJS 2.0 and almond 0.1”