0

这是一个演示该问题的示例应用程序(抱歉,没有小提琴,因为它是关于基于节点的 r.js)

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

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

  • 应用程序
    • index.html - 包括 requirejs、main.js,然后require(['plugins'])(标准多页设置)
    • 脚本
      • main.js - 引导 requirejs,将 baseUrl 设置为 /scripts
      • plugins.js - 从 app-plugins 引用和公开模块。参考文献通过../app-plugins/a.js
    • 应用程序插件
      • 一个.js

在非优化版本中一切正常(在应用程序上运行网络服务器,打开控制台并导航到索引页面)。

但是,由于../在 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)
4

1 回答 1

1

我做了以下更改并且它有效:

  • main.js

    baseUrl: 'scripts'
    

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

  • optimization/build.json变成:

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

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

    1. appDir让 r.js 知道来源在哪里。我相信这也让 r.js 知道如何处理相对路径——虽然不太确定。
    2. 然后baseUrl变为相对于appDir
    3. dir是输出的地方,它还将复制在你appDir那里找到的文件。

此过程会覆盖./build/

于 2014-09-19T11:15:50.123 回答