Jas*_* L. 5 javascript coffeescript requirejs
我有一个问题似乎无法找到答案.我正在构建一个供消费的库,我想使用requirejs使其更加模块化.我有以下项目结构......
- example
- scripts
- otter
- libs
- signals
signals.js
- modules
subModule1.js
subModule2.js
otter.js
index.htm
- src
- libs (copied to example folder at build time)
- signals
signals.js
- modules
subModule1.coffee
subModule2.coffee
- otter.coffee
Run Code Online (Sandbox Code Playgroud)
我想要做的是能够从我的任何其他文件中请求signals.js文件和我的任何模块,而无需在require中设置路径,或者我不必知道项目是如何设置的在开发时.
例如,我在otter.coffee文件中尝试做的是:
define ['/libs/signals/signals'], (signals) ->
# I've also tried './libs/signals/signals' and 'libs/signals/signals'
Run Code Online (Sandbox Code Playgroud)
这似乎不起作用,因为无法找到signals.js文件.
如何让requirejs相对于当前文件加载模块?我已经读过,我可以要求require作为依赖项,并且该require的路径将被设置为文件的路径,但这似乎也不起作用.它抛出一个未加载的错误i:e -
define (require) ->
signals = require './libs/signals/signals'
Run Code Online (Sandbox Code Playgroud)
我有什么想法可以做到这一点?我需要更改库的结构吗?我是否必须强制使用特定结构?我是否要求使用它的人在他们的require配置中包含某些路径?
提前谢谢了!
编辑 -
我注意到如果我在main.js文件中将我的库别名为require,则需要(通过require或define)信号不起作用(继续找不到404).但是,如果我没有别名我的库一切正常..
例如,如果我的require main.js文件有..
...
paths: {
'otter': 'scripts/otter/otter'
}
...
Run Code Online (Sandbox Code Playgroud)
那么信号的要求就失败了.但是,如果我没有路径并且我需要水獭通过它的直接路径,那么信号的需求就会起作用.我在otter.js中需要这样的信号......
define (require) ->
signals = require './libs/signals/signals'
Run Code Online (Sandbox Code Playgroud)
这是require.js的错误吗?
RequireJS 使用两个函数来完成其工作:define()和require()。
我的理解是define()列出依赖项并仅加载模块;加载不是模块的依赖项(那些不使用的模块define())已完成require()。
因为只有模块才能加载模块,所以必须有其他人来加载第一个模块。就您而言,第一个必须使用signals.js模块otter.js,第二个必须使用require(). 我想require()在任何使用之前总是需要a define()。
水獭.js:
require.config({
paths: {
'signals': 'libs/signals/signals',
'module1': 'modules/subModule1'
}
});
require(['signals'], function(signals) {
signals.initialize();
});
Run Code Online (Sandbox Code Playgroud)
信号.js:
define(['module1'], function(module) {
return {
initialize: function() {
module.doStuff();
}
}
});
Run Code Online (Sandbox Code Playgroud)
子模块1.js:
define([], function() {
return {
doStuff: function() {
console.log('hello world');
}
}
});
Run Code Online (Sandbox Code Playgroud)
附:似乎不允许加载相对于当前文件的模块:属性用于baseUrl配置requirejs.config().
| 归档时间: |
|
| 查看次数: |
1725 次 |
| 最近记录: |