javascript - RequireJS require() 无法解析同一子目录级别的文件名

标签 javascript requirejs require base-url

我的目录结构如下:

app/
├ js/
│ ├ gui/
│ │ ├ main.js
│ │ └ santa.js
│ └ app.js
└ index.html <- includes requirejs and starts js/app.js

app.js:

baseUrl: 'js' // Pseudo-code for requirejs.config() of course
require('gui/main');

到目前为止一切顺利。但每个相同的目录 require()main.js出现问题:

ma​​in.js:

require('santa')

尝试 require() app/js/santa.js 不存在。

require('./santa')

尝试require() app/js/santa.js 不存在。

require('gui/santa')

尝试require() app/js/gui/gui/santa.js 不存在。

require('./gui/santa')

尝试 require() app/js/gui/gui/santa.js 不存在。

wtf

我似乎将我的文件包含在内的唯一方法是这样的:

require('js/gui/santa.js')

这违背了名称解析的目的和 baseUrl设置。

<小时/>

除了这个奇怪的地方,我还想要 baseUrl更改为js/gui对于任何 require() main.js内。配置应该是可扩展和可重写的。但当我这样做时:

requirejs.config({
    baseUrl     : 'js/layout'
});

main.js内,新的设置似乎被忽视了,就像政客们忽视了自己的 promise 一样。

最佳答案

您是否尝试过使用 define instead of require

Define 可以这样调用:

define('folder/main',
        [ "jquery", './AnotherModule' ],
        function($, AnotherModule) {});

第一个参数是模块名称 - 模块的显式路径。通常,您不会包含第一个参数 - Define() 总是隐式指定路径,通常使用显式路径是 not recommended .

另一方面,Require 不采用名称参数。仅使用 require() 而没有 Define() 来创建相对于源文件的路径是不可能的,因为 require 不会“创建”模块或定义 namespace 。任何 require() 的内容都是相对于 root 所必需的。

当您在define() 中包含相对依赖项(如“./AnotherModule”)时,它会相对于模块名称找到。在上述情况下,./AnotherModule 将解析为文件夹/AnotherModule。

在调用 require() 时,没有模块名称。相对依赖关系被解析到根。

<小时/>

就您而言,这将解释 require('santa')require('./santa') 的行为。我对 gui 为何不以相同方式运行的唯一猜测是,由于它包含一个子目录,因此处理方式不同。尝试使用 require('strange-new-directory/santa') 看看是否可以更深入地了解情况。

<小时/>

至于baseUrl重置,我相信baseUrl是一个全局特征,不能在中途重置(或者至少,我不建议这样做)。您应该能够使用 define 获得相对路径。祝你好运。

关于javascript - RequireJS require() 无法解析同一子目录级别的文件名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22355269/

相关文章:

javascript - bundle 中的 Dojo 模块

javascript - 可以用javascript写一个网络爬虫吗?

javascript - 如何将 Node 模块导入我的 backbone.js 应用程序?

Javascript 下拉列表

angularjs - 如何一起使用 ng-polymer-elements 、 angularjs 和 requirejs?

javascript - Requirejs - 在加载 data-main 之前配置 require

IronRuby - 如何要求没有强名称的 .NET 程序集?

php - 不需要 php 文件

JavaScript:如何弥补委托(delegate)模式中接口(interface)的不足?

javascript - knockout .js : ObservableArray with ObservableArrays inside?