1

CoffeeScript コードで JavaScript ライブラリ (sim.js) を再利用しようとしています。sim.js に付属する例では、「sim-0.26.js」、「buffet_restaurant.js」、および「buffet_restaurant.html」の 3 つのファイルが次のように接続されています (簡略化するためにいくつかのパラメーターを削除しました)。

「buffet_restaurant.html」の中に、

<script type="text/javascript" src="./buffet_restaurant_files/sim-0.26.js"></script>
<script type="text/javascript" src="./buffet_restaurant_files/buffet_restaurant.js"></script>
<script type="text/javascript">
  $(function () {
    $("#run_simulation").click(function () {
      var results = buffetRestaurantSimulation();
...

ここで、buffetRestaurantSimulation は、buffet_restaurant.js 内の関数です。bucket_restaurant.js のコードは次のように始まります。

function buffetRestaurantSimulation() 
{
    var sim = new Sim(); 
...

Sim は sim-0.26.js で次のように定義されます。

function Sim(){...};

この例は問題なく動作します。node.jsのCoffeeScriptファイルで「Sim」を再利用したいです。だから私はこれを試します(jasmine-nodeから呼び出されます):

sjs = require "./sim-0.26.js"

mysim = new sjs.Sim()

ここで、sim-0.26.js は、このコードを含むファイルである testsim.spec.coffee と同じディレクトリにあります。これを使用して呼び出すと:

jasmine-node --coffee ./testsim.spec.coffee

私はこれを得る:

mysim = new sjs.Sim();
        ^
TypeError: undefined is not a function

私はたくさんのことを間違っていると思います。私はこれらすべてにかなり慣れていません。

何か案は?

4

1 に答える 1

4

Simが追加されない限り、 dのexportsときに使用できません。Node.js モジュールを作成する方法の詳細については、モジュールのドキュメントを参照してください。require

これがブラウザとノードの両方で機能する必要がある場合は、これを のコードに追加するだけですsim.js

var root = typeof exports === "object" ? exports : window;

root.Sim = Sim;
于 2012-08-17T02:17:51.883 に答える