<!doctype html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <!-- require.jsの読み込みとメインファイルの指定(for plunker) -->
  <script data-main="page.js" async data-require="require.js@2.1.4" data-semver="2.1.4" src="//cdnjs.cloudflare.com/ajax/libs/require.js/2.1.4/require.js"></script>
  <!--<script src="require.js" data-main="page.js" async></script>-->
  <title>test Document</title>
</head>
<body>
 
</body>
</html>
// site-common.js
define(function(){
 
  // サイト内で共通で使う定数を纏めたオブジェクト
  var constant = {
    title:'とあるサンプル',
    description:'RequireJSをつかってみるとあるサンプル'
  };
 
  // 指定されたidに対する定数を返す関数
  function getConstant(id) {
    return constant[id];
  }
 
  // 指定されたidに対する定数を追加定義する関数
  function setConstant(id, value) {
    constant[id] = value;
  }
 
  // 指定された文字をページ内に表示する関数
  function commonPrint(str) {
    var elem = document.createElement('p');
    elem.innerHTML = str;
    document.body.appendChild(elem);
  }
 
  return {
    getConstant:getConstant,
    setConstant:setConstant,
    commonPrint:commonPrint
  };
});
// addon.js
define(['site-common'], function(Common){
 
  // 鍵カッコを定義
  //constant.startSquare = '「'; // これはエラーに
  //constant.endSquare = '」';   // これはエラーに
  Common.setConstant('startSquare', '「'); //意図していた書き方に
  Common.setConstant('endSquare', '」');   //意図していた書き方に
 
  // 鍵カッコをつけた文字列を返す
  function addSquareBracket(str) {
    return Common.getConstant('startSquare') + str + Common.getConstant('endSquare');
  }
 
  return {
    addSquareBracket:addSquareBracket
  };
});
// page.js
require(['site-common','addon'], function(Common, Addon){
  // ページロード時にタイトルと説明を表示
  //window.addEventListener('load', function(){ // 削除
    var title = Addon.addSquareBracket(Common.getConstant('title'));
    var description = Common.getConstant('description');
    Common.commonPrint(title);
    Common.commonPrint(description);
  //}); // 削除
});