7

目的: Node.js モジュールまたは Requirejs AMD モジュールを、次のような単純な古い JavaScript ファイルから作成します。

var foo = function () {};

私にはコントロールがなく、編集することもできません foo.js

foo最初の内部にプレーンな空のオブジェクトがあるのはなぜifですか? モジュールにプレーンな JavaScript ファイルを「含める」にはどうすればよいですか? ファイルmymodule.js:

(function(root) {
    if(typeof exports === 'object') { // Node.js
        var foo = require('./foo');

        console.log(foo); // { }
    } else if (typeof define === 'function' && define.amd) { // RequireJS AMD
        define(['foo'], function () {
            return foo;
        });
    }
}());
4

2 に答える 2

6

ロードされたノードモジュールは、モジュールが公開したいすべてのものをオブジェクトにrequire取り込む必要があります。exportsあなたの場合、ファイルが必要なときは何も追加されないexportsため、空として表示されます。つまり、簡単な答えは、なんらかの方法で内容を変更する必要があるということですfoo.js。手動で実行できない場合は、プログラムで実行する必要があります。なぜあなたはそれを制御できないのですか?

foo.js最も簡単なのは、適切なモジュールにするために必要なコードでコンテンツをプログラムでラップすることです。

// Add an 'exports' line to the end of the module before loading it.
var originalFoo = fs.readFileSync('./foo.js', 'utf8');
fs.writeFileSync('./foo-module.js', originalFoo + "\nexports.foo = foo;");
var foo = require('./foo-module.js');
于 2013-02-16T19:49:29.343 に答える
0

あなたが試すことができます:

var fs = require('fs');

var foo = fs.readFileSync('foo.js', 'utf8') // Or request it somehow, just get it as a string

foo += "module.exports.foo = module.exports = foo;";

fs.writeFileSync('fooModule.js',foo);

var foo = require('./fooModule');

// foo() and foo.foo() are both the same

注: これにはノードが必要です。

于 2013-02-16T20:09:11.533 に答える