Javascript 命令行上的实习生找到nodemailer,但不是它所需的模块

Javascript 命令行上的实习生找到nodemailer,但不是它所需的模块,javascript,node.js,dojo,require,intern,Javascript,Node.js,Dojo,Require,Intern,我正在和实习生切牙,觉得很难相处。我已经将我的情况简化为一个interntest文件夹,其中包含一个basic package.json和一个模块,其中包含我的intern.js和测试模块 interntest/ package.json src/ mymodule/ test/ intern.js MyTest.js My package.json列出了在此目录中运行节点所

我正在和实习生切牙,觉得很难相处。我已经将我的情况简化为一个
interntest
文件夹,其中包含一个basic package.json和一个模块,其中包含我的intern.js和测试模块

interntest/
    package.json
    src/
        mymodule/
            test/
                intern.js
                MyTest.js
My package.json列出了在此目录中运行节点所需的基本依赖项:

{
  "name": "interntest",
  "version": "1.0.0",
  "dependencies": {
    "intern": "1.3.2",
    "nedb": "~0.9.3",
    "nodemailer": "~0.5.14",
    "requirejs": "",
    "dojo": "1.9.2"
  }
}
npm安装
现在会获取这些依赖项

当前的问题是我试图使用的
nedb
nodemailer
模块。我原以为我可以在intern.js中简单地声明它们,如下所示:

loader: {
    // Packages that should be registered with the loader in each testing environment
    packages: [
        'node', 
        'nedb',
        'nodemailer',
在MyTest.js中需要,只需使用:

define([
    'intern!tdd',
    'intern/chai!assert',
    'nedb',
    'nodemailer'
], function (test, assert, Datastore, nodemailer) {
但似乎无法加载
nedb
,尽管
node\u modules/nedb/package.json
正确指定了
main:'index'

neek@alyssa:~/src/interntest$ ./node_modules/.bin/intern-client config=src/mymodule/test/intern suites=mymodule/test/MyTest
Defaulting to "console" reporter
Error: Failed to load module nedb/main from /home/neek/src/interntest/node_modules/nedb/main.js (parent: mymodule/test/MyTest)
    at /home/neek/src/interntest/node_modules/intern/node_modules/dojo/dojo.js:742:12
    at fs.js:207:20
    at Object.oncomplete (fs.js:107:15)
为了避免这个问题,我最终在
MyTest.js
中找到了这个:

define([
    'intern!tdd',
    'intern/chai!assert',
    'nedb/index',
    'nodemailer/lib/nodemailer'
这似乎是错误的,但至少避免了从这些模块加载任何.js文件的最初失败。然而,这似乎有致命的缺陷:

neek@alyssa:~/src/interntest$ ./node_modules/.bin/intern-client config=src/mymodule/test/intern suites=mymodule/test/MyTest
Defaulting to "console" reporter
Error: Attempt to require unloaded module lib/datastore
    at contextRequire (/home/neek/src/interntest/node_modules/intern/node_modules/dojo/dojo.js:255:12)
    at req (/home/neek/src/interntest/node_modules/intern/node_modules/dojo/dojo.js:30:10)
    at /home/neek/src/interntest/node_modules/nedb/index.js:7:17
    at Function.vm.runInThisContext (/home/neek/src/interntest/node_modules/intern/node_modules/istanbul/lib/hook.js:163:16)
    at /home/neek/src/interntest/node_modules/intern/node_modules/dojo/dojo.js:745:8
    at fs.js:266:14
    at Object.oncomplete (fs.js:107:15)
因此,在找到
nedb/index.js
之后,它现在无法找到该文件中引用的相对路径,
require('./lib/datastore')


很明显我有一些基本的错误。有人能给我一些建议吗?

谢谢Ken,看来我在MyTest.js中需要这个:

define([
    'intern!tdd',
    'intern/dojo/node!nedb',
    'intern/dojo/node!nodemailer',
    'intern/chai!assert',
define([
    'intern!tdd',
    'intern/chai!assert',
    'intern/dojo/node!nedb',
    'intern/dojo/node!nodemailer',
    '../Helper'
], function (test, assert, Datastore, nodemailer, Helper) {

    console.log('Great, test module was loaded');

    Helper.doSomething();
});
显然,因为nedb和nodemailer不是AMD,它们是CommonJS(?),所以必须使用
inter/dojo/node插件以在我的AMD上下文中加载它们

这将产生一个工作测试

对于学习这一点的其他人来说,当我自己创建一个非常简单的AMD模块时,它可以作为正常的需要。src/mymodule/Helper.js:

define([], function () {

    return {
        doSomething: function () {
            console.log('Helper did something.');
        }
    }
});
以及MyTest.js:

define([
    'intern!tdd',
    'intern/dojo/node!nedb',
    'intern/dojo/node!nodemailer',
    'intern/chai!assert',
define([
    'intern!tdd',
    'intern/chai!assert',
    'intern/dojo/node!nedb',
    'intern/dojo/node!nodemailer',
    '../Helper'
], function (test, assert, Datastore, nodemailer, Helper) {

    console.log('Great, test module was loaded');

    Helper.doSomething();
});
因此,可以简单地将Helper设置为
mymodule/Helper
。/Helper
(相对于MyTest.js)。

您是否看到了位于的“测试非AMD代码”部分?