【发布时间】:2015-10-30 22:06:39
【问题描述】:
我试图将两个 js 文件——main.js 和 cookies.js——编译到一个文件中。
-/
|-main.js
|-cookie.js
|-require.js
|-main-built.js
|-build.js
main.js 包含脚本逻辑并依赖/需要 cookie.js。
如果我先加载 cookie.js 再加载 main.js,那么如果没有 require.js,一切都会很好。即:
<script src="cookie.js"></script>
<script src="main.js"></script>
这适用于开发,但我需要一个最终的 js 文件用于生产。
我开始尝试使用 require.js (http://requirejs.org/)
<script data-main="main-built.js" src="require.js"></script>
其中main-built.js是运行的单个文件输出结果:
node r.js -o build.js
我的构建文件设置如下:
({
include: ["cookiejs","requirejs"],
baseUrl: '.',
paths: {
'cookiejs': 'cookie',
'requirejs': 'require'
},
name:"main",
out: "main-built.js",
})
"main" 从构建文件中拉入 main.js, "require" 引入 require.js, "cookie" 引入 cookie.js。
问题 当执行最终编译的文件时,cookie 函数没有定义。具体来说,由于 cookie.js 处理 cookie 交互,因此错误是:
"Uncaught ReferenceError: cookie is not defined"
我可以看到 cookie.js 代码实际上被复制到 main-built.js 中,所以我认为这是如何告诉 require.js main.js 依赖于 cookie.js 并让编译器重新排序执行的问题最终主构建文件中的代码,但我真的抓住了如何告诉 require.js 如何做到这一点的稻草。
我尝试了什么
在构建文件中包含和排除 require.js 并没有发现任何区别。
在构建文件中使用“deps”而不是“include” --- 我没有发现区别
各种 uglify 构建选项
【问题讨论】:
-
在shim config 获得战利品
-
感谢 Vishwanath - 作为依赖项的 cookie.js 文件设置为使用 AMD 加载程序(如果存在),似乎 shim 配置适用于不使用“define()”声明的旧脚本模块化值。这被定义为 cookie。
-
您错过了使用 shim 进行依赖配置。我将在答案中添加。
标签: requirejs