LoginSignup
45
45

More than 5 years have passed since last update.

Node.js でも Webブラウザでも利用できる ライブラリのイントロ

Last updated at Posted at 2012-07-09

Web で動く前提のライブラリだけど、node のコンソールで叩いて検証した事はよくある。async.js のソース見て、「ああ、こうすればよかったのか」感銘を受けたので。

intro.js
(function(root) { // 引数の root はグローバルオブジェクト
  var myModule = {},

      // もし先に同じ名前のオブジェクトが当てられていた場合の対策
      oldMyModule = root.myModule; 

  if (typeof module !== 'undefined' && module.exports) { // Node.js の場合
    module.exports = myModule;
  } else { // ブラウザの場合
    root.myModule = myModule;
  }

  // 衝突対策
  myModule.noConflict = function() {
    root.myModule = oldMyModule;
    return myModule;
  };

  // 以下モジュールのAPI の宣言
})(this); // トップレベルでの this はグローバルオブジェクトを指す

require 不要なスタンドアロンのライブラリだとこれでよい

おまけ

(function(exports) {
   // モジュールの API を宣言する
})(typeof exports === 'undefined' ? (myModule = {}) : exports);

↑ の書き方もよく見るけど、こっちの場合 myModule をグローバルにダイレクトに代入してるので、先の例のような noConflict() のような対応が出来ないのと、JsLint は確実に怒るやり方なので冒頭の書き方の方がやっぱり良いなって思う

45
45
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
45
45