在node.js amdefine中使用RequireJS插件

在node.js amdefine中使用RequireJS插件,node.js,plugins,requirejs,Node.js,Plugins,Requirejs,我创建了一个简单的requireJS插件 它在浏览器中运行良好,但在nodejs中不工作。。。插件是可用的 作为插件而不仅仅是模块的当前代码如下: if (typeof define !== 'function') var define = require('amdefine')(module); define(function (require, exports, module) { var _ = require("underscore"), Backbon

我创建了一个简单的requireJS插件

它在浏览器中运行良好,但在nodejs中不工作。。。插件是可用的

作为插件而不仅仅是模块的当前代码如下:

if (typeof define !== 'function')
    var define = require('amdefine')(module);

define(function (require, exports, module) {
    var _ = require("underscore"),
        Backbone = require("backbone");

    ...

    var plugin = {
        load:function (name, require, load, config) {
            var resources = this.parseResources(name);
            require(resources, function () {
                var localValidator = global.Validator.extend({});
                _.each(arguments, function (resource) {
                    localValidator.customize(resource);
                }, this);
                var local = _.extend({}, global, {
                    Validator:localValidator,
                    Model:global.Model.extend({
                        Validator:localValidator
                    }),
                    SyncModel:global.SyncModel.extend({
                        Validator:localValidator
                    })
                });
                load(local);
            });
        },
        parseResources:function (name) {
            if (name == "")
                return [];
            return name.split("+");
        }
    };

    var global = {
        version:"1.0.1",
        View:View,
        Aggregator:Aggregator,
        Messenger:Messenger,
        Model:AsyncModel,
        SyncModel:SyncModel,
        Validator:Validator,
        Runner:Runner,
        DependencyResolver:DependencyResolver,
        load:plugin.load.bind(plugin)
    };

    module.exports = global;

});
我尝试用nodejs jasmine调用它来单元测试它是否工作,但它显示找不到文件名:

if (typeof define !== 'function') { var define = require('amdefine')(module, require) }
require("./validation"); //works
require("./validation!./basicTests"); //does not work, but the plugin and path is ok...
堆栈:

   Message:
     Error: Cannot find module './validation!./basicTests'
   Stacktrace:
     Error: Cannot find module './validation!./basicTests'
    at Function.Module._resolveFilename (module.js:338:15)
    at Function.Module._load (module.js:280:25)
    at Module.require (module.js:362:17)
    at require (module.js:378:17)
    at null.<anonymous> (D:\creation\software developer\projects\dev\document root\src\validation.plugin.spec.js:9:17)
    at jasmine.Env.describe (D:\creation\software developer\libs\jasmine-node\lib\jasmine-node/jasmine-2.0.0.rc1.js:791:21)
    at describe (D:\creation\software developer\libs\jasmine-node\lib\jasmine-node/jasmine-2.0.0.rc1.js:575:27)
    at Object.<anonymous> (D:\creation\software developer\projects\dev\document root\src\validation.plugin.spec.js:7:1)
    at Module._compile (module.js:449:26)
    at Object.Module._extensions..js (module.js:467:10)
在plugin.load中,本地对象似乎还可以,我将其交给了load方法,但它没有按要求到达。至少在define标记中,它调用amdefine require,而不是commonJS

edit2:

我在amdefine网站上发现:

只要加载程序插件调用它们的load(),就支持它们 同步回调。所以做网络请求的人不会 工作然而,像text这样的插件可以在本地加载文本文件


我不知道require被称为async。

我修改了我的插件,通过amdefine synchronous和by browser script asynchronous调用require

var amdefine = false;
if (typeof define !== 'function')
    var define = require('amdefine')(module, require),
        amdefine = true;

define(function (require, exports, module) {
    var _ = require("underscore"),
        Backbone = require("backbone");


    ...


    var plugin = {
        load:function (name, _require, load, config) {
            var resources = this.parseResources(name);
            var require = amdefine ? function (resources, callback) {
                var modules = [];
                _.each(resources, function (resource) {
                    modules.push(_require(resource));
                });
                callback.apply(null, modules);
            } : _require;
            require(resources, function () {
                var localValidator = global.Validator.extend({});
                _.each(arguments, function (resource) {
                    localValidator.customize(resource);
                }, this);
                var local = _.extend({}, global, {
                    Validator:localValidator,
                    Model:global.Model.extend({
                        Validator:localValidator
                    }),
                    SyncModel:global.SyncModel.extend({
                        Validator:localValidator
                    })
                });
                load(local);
            });
        },
        parseResources:function (name) {
            if (name == "")
                return [];
            return name.split(":");
        }
    };

    ...

});
var amdefine = false;
if (typeof define !== 'function')
    var define = require('amdefine')(module, require),
        amdefine = true;

define(function (require, exports, module) {
    var _ = require("underscore"),
        Backbone = require("backbone");


    ...


    var plugin = {
        load:function (name, _require, load, config) {
            var resources = this.parseResources(name);
            var require = amdefine ? function (resources, callback) {
                var modules = [];
                _.each(resources, function (resource) {
                    modules.push(_require(resource));
                });
                callback.apply(null, modules);
            } : _require;
            require(resources, function () {
                var localValidator = global.Validator.extend({});
                _.each(arguments, function (resource) {
                    localValidator.customize(resource);
                }, this);
                var local = _.extend({}, global, {
                    Validator:localValidator,
                    Model:global.Model.extend({
                        Validator:localValidator
                    }),
                    SyncModel:global.SyncModel.extend({
                        Validator:localValidator
                    })
                });
                load(local);
            });
        },
        parseResources:function (name) {
            if (name == "")
                return [];
            return name.split(":");
        }
    };

    ...

});