我可以为单个和多个优化设置一个配置

时间:2015-10-16 20:08:54

标签: requirejs

文件结构

assets/js/
        - build/
        - plugin/
            jquery.min.js
        - src/
            index.js
        config.js
        builds.js
        require.js

资产/ JS / SRC / index.js

requirejs(['jquery']);

资产/ JS / config.js

requirejs.config({
    baseUrl: './',
    paths: {
        jquery: 'plugin/jquery.min'
    }
})

如果我想使用r.js来优化文件,只需执行r.js -o config.js name=src/index out=build/index.js,r.js会将文件编译成build/index.js并具有优化和依赖性,但是会有很多文件需要在将来编译,所以我创建了一个builds.js

资产/ JS / builds.js

({
    appDir: 'src',
    dir: 'build',
    mainConfigFile: 'config.js',
    modules: [
        {name: 'index'}
    ]
})

如果我运行r.js -o builds.js,我的路径信息就会错误。

Error: Error: ENOENT: no such file or directory, open 'D:\www\r\build\plugin\jquery.min.js'

我需要返回config.js,然后修改相对于src的路径。

requirejs.config({
    baseUrl: './',
    paths: {
        jquery: '../plugin/jquery.min'
    }
})

它可以工作,但是可以为两个目的编写一个配置文件吗?

1 个答案:

答案 0 :(得分:0)

在构建文件中再次指定路径,相对于/ src。

builds.js

({
    appDir: 'src',
    baseUrl: './',
    dir: 'build',
    modules: [
        {name: 'index'}
    ],
    paths: {
        jquery: '../plugin/jquery.min'
    }
})

构建文件中的路径与配置文件中的路径不同。

/ src的appDir选项指定所有脚本都位于/ src中,但是你的config.js和文件夹结构在/ src之外都有/ plugins。

解析jquery路径后,将使用config.js文件中的路径,因为使用了mainConfigFile选项。

除了配置文件之外,还需要在构建文件中重新定义所有模块路径。这是因为所有模块路径都是相对于baseUrl解析的,而baseUrl与构建文件中的appDir有关 - 这就是令人困惑的位。

引用以下r.js示例构建文件。 https://github.com/jrburke/r.js/blob/master/build/example.build.js

RequireJS优化器上的官方文档包含有关路径解析的有用部分。 http://requirejs.org/docs/optimization.html#basics

  

相对路径解析规则:

     

通常,如果它是路径,则它相对于用于保存构建选项的build.js文件,或者相对于当前工作目录仅使用命令行参数。作为文件路径的属性示例: appDir,dir,mainConfigFile,out,wrap.startFile,wrap.endFile

     

对于 baseUrl ,它相对于 appDir 。如果没有appDir,则baseUrl相对于build.js文件,或者仅使用命令行参数,即当前工作目录。

     

对于路径,它们与baseUrl相关,就像它们对require.js一样。