我有一个使用 Require 来加载依赖项的 Web 应用程序。config.shim
我有一组使用 Require对象包含的 JS 库。
两个这样的示例库是:
require.config({
shim: {
"libs/leaflet": {
exports: "L"
}
"libs/leaflet-dvf": {
deps: ["libs/leaflet"],
exports: "L"
}
}
第二个库,leaflet-dvf
需要第一个,leaflet
. 第二个是第一个的插件,它依赖于L
第一个库定义的全局范围变量。
当我正常使用 Require 运行应用程序时,一切正常。我可以包含 shim 中的任何一个库,一切都很好。没问题。
当我通过 Require r.js Optimizer 运行此代码时,问题就出现了。优化器在构建单个优化的 JS 文件时,会错误地对依赖项进行排序。在构建的文件中,leaflet-dvf
代码将位于leaflet
代码之前。这会导致 JS 运行时错误,因为依赖插件找不到所需的L
全局范围变量。
我的构建配置如下所示:
({
baseUrl: "../js",
paths: {
"requireLib": "../js/libs/require"
},
include: ["requireLib"],
name: "Main",
out: "bin/Main-built.js",
optimize: "none",
wrapShim: true
})
当我使用 Rhino 运行优化器时,它会构建我的输出文件。在Main-built.js
文件中,插件的代码将位于所需库之前。这会导致L undefined error
.
如何让优化器尊重我的垫片的依赖顺序,以便在我的优化 JS 文件中正确排序库文件?