私は CoffeeScript に慣れてきたばかりで、クラスに行き詰まっています。このようなクラスを含む JavaScript ファイルを要求できるように、ファイルをノードのように構造化したいです。
Test = require "test.js"
Test.start()
start は Test クラスのメソッドです。
これは可能ですか?
私は CoffeeScript に慣れてきたばかりで、クラスに行き詰まっています。このようなクラスを含む JavaScript ファイルを要求できるように、ファイルをノードのように構造化したいです。
Test = require "test.js"
Test.start()
start は Test クラスのメソッドです。
これは可能ですか?
これは可能ですか?
Nodeとまったく同じではありません。require
ブラウザ環境には同期はありません。それでも、 AMDを見て、それを行うために多くの非同期ライブラリの1つを試すことができます。最も有名な実装はrequire.jsです。
ブラウザー環境で CommonJS モジュール (Node.js が使用するモジュール) を使用する最も簡単な方法は、Browserifyを使用することです。個人的には、AMD のものよりも CommonJS モジュールの定義の方が好きですが、それは単なる個人的な好みです。
require 'test'
また、クラスコンストラクターを直接提供するようにクラスをエクスポートするには、クラスを次のように割り当てる必要があることを考慮してくださいmodule.exports
。
# In test.coffee
module.exports = class Test
@start = -> console.log 'start!'
次に、そのファイルをコンパイルするtest.js
と、使用する準備が整います。
Test = require './test'
Test.start()
Node.js では、これはうまく機能します。ブラウザーでは、最初に Browserify (またはその他のツール) を使用してファイルを処理し、それを機能させる必要があります ( CommonJS モジュールが正しく機能するために、適切なrequire
関数といくつかexports
の変数が作成されます)。module.exports
ステッチ、ヘム(ステッチに触発されたものですが、より優れた機能を備えています) とbrowserifyを見てください。
個人的には裾の方が好きです。あなたはそれで次のようなことができます:
# app/lib/model.coffee
module.exports = class Model
...
.
# app/lib/util.coffee
helper1 = -> ...
helper2 = -> ...
module.export = {helper1, helper2}
.
# app/index.coffee
Model = require 'lib/model'
{helper1} = require 'lib/util'
# do whatever you want with required stuff
...
Hem は、CoffeeScript をオンザフライでコンパイルし、必要なすべてのコードを一緒にバンドルします (コードの外部依存関係として npm モジュールと任意の js ライブラリもサポートします。詳細についてはドキュメントを参照してください)。