requirejs优化器可以使用相对路径吗?

时间:2014-09-17 18:19:21

标签: requirejs requirejs-optimizer

Here is a sample application demonstrating the issue(抱歉没有小提琴,因为它是关于基于节点的r.js)

我无法让requirejs优化器与相对路径一起正常工作。

我的网络应用程序包含以下目录

  • 应用
    • index.html - 包括requirejs,main.js,然后是require(['plugins'])(标准多页设置)
    • 脚本
      • main.js - bootstraps requirejs,将baseUrl设置为/ scripts
      • plugins.js - 从app-plugins引用和公开模块。通过../app-plugins/a.js
      • 引用
    • APP-插件
      • a.js

在非优化版本中一切正常(在app上运行webserver,打开控制台并导航到索引页面)。

然而,由于plugins.js中的../,优化会给我一个错误。要将此CD看到优化目录并运行node .\node_modules\requirejs\bin\r.js -o .\build.json。错误将是

W:\temp\requireop\optimization [master]> .\Build-RequireJs.ps1

Tracing dependencies for: main

Tracing dependencies for: plugins
Error: ENOENT, no such file or directory 'W:\temp\requireop\build\app-plugins\a.js'
In module tree:
    plugins

Error: Error: ENOENT, no such file or directory 'W:\temp\requireop\build\app-plugins\a.js'
In module tree:
    plugins

    at Object.fs.openSync (fs.js:427:18)

1 个答案:

答案 0 :(得分:1)

我做了以下更改并且工作正常:

  • main.js

    baseUrl: 'scripts'
    

    在一般情况下,路径区分大小写;最好不要包括前导斜杠。

  • optimization/build.json变为:

    {
        appDir: '../app',
        baseUrl: 'scripts',
        dir: '../build',
        modules: [ // the same
        ]
    }
    

    您可以找到详细信息here,但有一些解释:

    1. appDir让r.js知道来源的位置。我相信这也使得r.js知道如何处理相对路径 - 虽然不太确定。
    2. 然后baseUrl变得相对于appDir
    3. dir是输出的位置,它还会复制在appDir中找到的文件。

此过程会覆盖/build/中的文件。