我创建了一个app.js文件,其中包含了我所有的JS文件,用于管理依赖项和其他模块的内容。
通常,它运作良好,但有时会崩溃。那是我的app.js文件。我所有的"模块"文件将jQuery作为依赖关系在" define"功能
DateTime
什么可能导致崩溃?当它工作时,控制台中没有错误,但是当它崩溃时,它会显示许多模块的错误。
未捕获的ReferenceError:未定义jQuery
当未定义jQuery时,jQuery和其他文件都已完全加载,网络选项卡上没有错误。
感谢您的帮助!
答案 0 :(得分:1)
jQuery和其他一些库 - 一些旧的和一些只是坚持要避免现代约定(咳嗽 Backbone 咳嗽) - 不支持任何模块加载器分类。要加载带有require的那些,您需要使用the shims feature并明确列出模块导出的符号。您可以看到示例here, in my front-end template project并在下面分开:
require.config({
shim: {
jquery: {
exports: '$'
}
}
});
添加填充程序告诉需要加载模块,然后将全局符号视为模块的默认导出。
当从其他代码中使用 jQuery时,请务必确定:
为了清洁,我更喜欢前者。给定垫片后,您需要在每个模块的开头require('jquery')
,不 require('$')
或类似的东西。垫片的名称(键)是模块名称,而var $ = require('jquery')
将返回您需要的符号。
为了便于阅读和自我记录,我更喜欢使用库名作为填充名称(jquery
,underscore
,lodash
)并使用符号将其导入范围( $
或_
),而不是具有单个非alnum字符模块名称。我相信这是个人偏好,但很明显是什么
import $ from 'jquery';
确实
如果你有jQuery插件或使用Twitter的Bootstrap,你可能需要定义依赖于你的新jQuery“模块”的其他填充程序。这些强制jQuery在插件之前加载,实质上列出了依赖于需求的依赖树而不依赖于模块本身。 My Bootstrap example也适用于jQuery插件:
shim: {
bootstrap: {
deps: ['jquery']
}
}
这会强制模块之间的依赖关系,允许您require
插件,并确保父母先前已加载。由于jQuery等将它们的符号放入全局范围,因此您不需要设置任何插件的导入,只需确保在插件开始加载之前需要库。< / p>