我有一个使用Require的Web应用程序,以便加载依赖项。我有一组使用Require config.shim
对象包含的JS库。
两个这样的示例库是:
require.config({
shim: {
"libs/leaflet": {
exports: "L"
}
"libs/leaflet-dvf": {
deps: ["libs/leaflet"],
exports: "L"
}
}
第二个库leaflet-dvf
需要第一个库leaflet
。第二个是第一个插件,它依赖于第一个库定义的全局范围变量L
。
当我使用Require正常运行应用程序时,一切正常。我可以包括垫片中的任何一个库,一切都很好。没问题。
当我通过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运行Optimizer时,它会构建我的输出文件。在Main-built.js
文件中,插件的代码将位于所需的库之前。这会导致L undefined error
。
如何让Optimizer尊重我的Shims的依赖顺序,以便在我的Optimized JS文件中正确排序库文件?
答案 0 :(得分:1)
我有一个类似的问题,一段时间回来与淘汰赛扩展和垫片没有正常工作。这就是我们解决它的方式。
创建一个名为:leafletLib
的模块define(["libs/leaflet","libs/leadleft-dvf"],function(leftlet,dvf){
return leaflet;
});
LeafletLib有主库和所有扩展。在将leaflet或leaflet-dvf作为依赖项的模块上,调用leafletLib。它有点hacky但它可能适合你。
define(["leafletLib"],function(leafletLib){});