2016-02-14 36 views
4

我看到this answer但AFAICT它不适合我。也许我在做一些愚蠢的事情。我使用almondgrunt-contrib-requirejs。我已经尝试了一堆东西了解r.js,杏仁和相对路径

这里是我的布局

. 
├── Gruntfile.js 
├── 3rdparty 
│ ├── require.js 
├── src 
│ ├── lib.js 
│ └── main.js 
└── node_modules 
   └── almond 
      └── almond.js 

这是我的咕噜-的contrib-requirejs配置

requirejs: { 
    full: { 
    options: { 
     baseUrl: "./", 
     name: "node_modules/almond/almond.js", 
     include: [ "src/main.js" ], 
     out: "dist/app.js", 
     optimize: "none", 
    }, 
    }, 
}, 

main.js看起来像这样

requirejs(['./lib',], function(lib) { 
    lib.hello(); 
}); 

lib.js看上去像这样

define([], function() { 
    return { 
     hello: function() { 
      console.log("hello from lib"); 
     }, 
    }; 
}); 

如果运行使用require.js在

<script src="3rdparty/require.js" data-main="src/main.js"></script> 

它运行大的页面。 You can see it live it here。检查控制台,你会看到它打印hello from lib

所以我跑咕噜。然后我运行使用dist/app.js一个页面,我得到的错误

Uncaught Error: undefined missing lib 

这里有一个live page

检查产生dist/app.js我看到的lib已经变成这个

define('src/lib',[], function() { 
    ... 
}); 

而且主要是包括像这样

requirejs(['./lib'], function(lib) { 
    ... 
}); 

换句话说,即r.js产生src/lib没有按标识不匹配主要参考的编号./lib

这似乎是r.js的一个非常直接的例子。就像几乎“你好的世界”。

我在做什么错?

有一件事我已经试过是改变baseUrl./src

requirejs: { 
    full: { 
    options: { 
     baseUrl: "./src", 
     name: "node_modules/almond/almond.js", 
     include: [ "src/main.js" ], 
     out: "dist/app.js", 
     optimize: "none", 
    }, 
    }, 
}, 

但现在我得到

{ [Error: Error: ENOENT: no such file or directory, open '/Users/gregg/temp/grunt-contrib-requirejs-example/src/node_modules/almond/almond.js' 
    at Error (native) 
] 
    originalError: 
    { [Error: ENOENT: no such file or directory, open '/Users/gregg/temp/grunt-contrib-requirejs-example/src/node_modules/almond/almond.js'] 
    errno: -2, 
    code: 'ENOENT', 
    syscall: 'open', 
    path: '/Users/gregg/temp/grunt-contrib-requirejs-example/src/node_modules/almond/almond.js', 
    fileName: '/Users/gregg/temp/grunt-contrib-requirejs-example/src/node_modules/almond/almond.js' } } 

所以我尽量固定杏仁路径

requirejs: { 
    full: { 
    options: { 
     baseUrl: "./src", 
     name: "../node_modules/almond/almond.js", 
     include: "main", 
     out: "dist/app.js", 
     optimize: "none", 
    }, 
    }, 
}, 

但是,

{ [Error: Error: ERROR: module path does not exist: ../node_modules/almond/almond.js for module named: ../node_modules/almond/almond.js. Path is relative to: /Users/gregg/temp/grunt-contrib-requirejs-example 
    at /Users/gregg/temp/grunt-contrib-requirejs-example/node_modules/requirejs/bin/r.js:30214:35 
] 
    originalError: [Error: ERROR: module path does not exist: ../node_modules/almond/almond.js for module named: ../node_modules/almond/almond.js. Path is relative to: /Users/gregg/temp/grunt-contrib-requirejs-example] } 

我没有得到什么?

The entire thing is checked into github here如果您想使用它。

回答

2

所以这里是答案。

r.js宁愿不模块名称路径

requirejs: { 
    full: { 
    options: { 
     baseUrl: "./src", 
     paths: { 
     almond: "../node_modules/almond/almond", 
     } 
     name: "almond", 
     include: [ "main.js" ], 
     out: "dist/app.js", 
     optimize: "none", 
    }, 
    }, 
},