【问题标题】:Should requirejs be included in the main built file when using the requirejs bundles option使用 requirejs 捆绑选项时,是否应将 requirejs 包含在主构建文件中
【发布时间】: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 包的加载。

标签: requirejs r.js


【解决方案1】:

这在您的主文件构建中看起来很可疑:

paths: mixIn({}, requireConfig.paths, { "require": "scripts/require.js" }),

我不确定 mixIn 位的作用,因为这不是库存的 RequireJS 代码,但您似乎想在构建中以 require 的名称包含 RequireJS,这绝对是错误的。 documentation says

如果你想在 main.js 源中包含 require.js,你可以使用这种命令:

node ../../r.js -o baseUrl=. paths.requireLib=../../require name=main include=requireLib out=main-built.js

由于“require”是一个保留的依赖名称,您创建一个“requireLib”依赖并将其映射到require.js文件。

【讨论】:

  • 我也不确定 mixin 的作用,它是我从 Durandal 任务中获得的,但我认为这不是问题,我可以将 requirejs 包含在主构建中文件,但问题是当我这样做时,pm.js 包在加载时会得到一个已定义未定义的错误。
  • 您是否按照文档中的说明修改了构建?
  • 我看了很多文档,不知道我做错了什么
  • 我的意思是我在回答中指出的那一点文档。
  • 我尝试使用不同的模块名称包括 require 并且当 pm.js 包加载路径时它遇到了同样的问题: mixIn({}, requireConfig.paths, { "requireLib": "../ lib/require/require" }),包括:["requireLib"],
猜你喜欢
  • 2014-09-30
  • 1970-01-01
  • 2013-12-29
  • 1970-01-01
  • 2017-01-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-21
相关资源
最近更新 更多