【发布时间】:2015-02-17 22:33:06
【问题描述】:
我在使用 require bundles 选项时遇到了问题。如果主构建文件中包含 requirejs 一切正常,直到我尝试从不同的包加载文件。检索捆绑的文件,但随后引发“定义未定义”错误。我能够加载捆绑包的唯一方法是确保 requirejs 不在主构建文件或 pm.js 中,然后使用脚本标签加载 requirejs 并使用 data-main 属性,但这好像不太对。
所以当 requirejs 包含在 main-built.js 中时,这样的东西最初可以工作(站点加载正常),但是当 pm.js 包加载时我得到“定义未定义”错误
<script type="text/javascript" src="~/dist/main-built.js"></script>
requirejs.config({
bundles: {
'pm': ['pm/dashboard', 'text!pm/dashboard.html']
}
});
这就是我最终让它工作的方式,但似乎不对。
<script type="text/javascript" src="~/scripts/require.js" data-main="dist/main-debug")"></script>
这个 durandal 任务创建主构建文件
durandal: {
main: {
src: ["app/**/*.*", "scripts/durandal/**/*.*", "!app/mockup/**/*.*", "!app/performancemanagement/**/*.*"],
options: {
//name: "scripts/require",
name: "",
baseUrl: requireConfig.baseUrl,
paths: mixIn({}, requireConfig.paths, { "require": "scripts/require.js" }),
exclude: ["jquery", "knockout", "toastr", "moment", "underscore", "amplify"],
optimize: "none",
out: "dist/main-debug.js"
}
},
},
此任务构建 pm.js 包
requirejs: {
compile: {
options: {
include: generateFileList("app/pm", "**/*.*", false, false),
//exclude: ["jquery", "knockout", "toastr", "moment", "underscore", "amplify", "preferenceconstants", "constants", "config", "utility/koutilities", "scripts/logger", "base/viewmodel"]
// .concat(generateFileList("scripts/durandal", "**/*.js", false))
// .concat(generateFileList("app/dataservice", "**/*.js", false))
// .concat(generateFileList("app/model", "**/*.js", false))
// .concat(generateFileList("app/reports", "**/*.js", false)),
baseUrl: "app/",
name: "",
paths: mixIn({}, requireConfig.paths, { "almond": "scripts/almond-custom.js" }),
optimize: 'none',
inlineText: true,
pragmas: {
build: true
},
stubModules: ['text'],
out: "dist/pm.js"
}
}
}
当 main-built 中的任何东西需要它时,pm.js 包会被下载并执行,现在它由 Durandal 中的路由器完成,但我很确定 Durandal 与该问题无关。
【问题讨论】:
-
请显示构建配置以及如何触发
pm包的加载。