Javascript Require.js忽略baseUrl
好吧,这让我发疯了,也许有人能给我指出正确的方向 我将最新的require.js与jquery结合使用作为我的模块加载器。我正在使用Javascript Require.js忽略baseUrl,javascript,requirejs,Javascript,Requirejs,好吧,这让我发疯了,也许有人能给我指出正确的方向 我将最新的require.js与jquery结合使用作为我的模块加载器。我正在使用datamain属性指向带有baseUrl的配置文件。当我尝试加载模块时,baseUrl被忽略,require正在尝试从与main.js相同的位置加载 /js/main.js require.config({ baseUrl: '/js/vendor/' }); require.config({ baseUrl: '/js/vendor/' });
datamain
属性指向带有baseUrl
的配置文件。当我尝试加载模块时,baseUrl
被忽略,require正在尝试从与main.js
相同的位置加载
/js/main.js
require.config({
baseUrl: '/js/vendor/'
});
require.config({
baseUrl: '/js/vendor/'
});
require(['jquery', 'bootstrap'], function($) {
$(function() {
console.log('hello world!');
});
});
require.config({
baseUrl: '/js/vendor/',
deps: ['../boostrap']
});
define(['jquery', 'bootstrap'], function($) {
$(function() {
console.log('hello world!');
});
});
/path/to/page.html
<script data-main="/js/main" src="/js/vendor/require-jquery.js"></script>
<script>
require(['jquery', 'bootstrap'], function($) {
$(function() {
console.log('hello world!');
});
});
</script>
需要(['jquery','bootstrap'],函数($){
$(函数(){
log('helloworld!');
});
});
期望值:
加载<代码>http://localhost:3000/js/vendor/bootstrap.js和日志你好,世界代码>
实际值:
尝试加载http://localhost:3000/js/bootstrap.js
--失败:'(
我已经尝试在require script标记中使用相对路径而不是绝对路径来处理data main
和src
。我所做的一切似乎都不会触发baseUrl
。我是否完全缺少文档中的某些内容?问题在于require.js异步加载脚本(这就是requirejs背后的要点)因此,当您在加载require之后立即将require()
添加到脚本标记中时,此脚本将在加载js/main.js
之前执行
简单的方法是将所有这些都包含在main.js
中,或者创建一个新文件来保存这篇文章并从js/main加载它
/js/main.js
require.config({
baseUrl: '/js/vendor/'
});
require.config({
baseUrl: '/js/vendor/'
});
require(['jquery', 'bootstrap'], function($) {
$(function() {
console.log('hello world!');
});
});
require.config({
baseUrl: '/js/vendor/',
deps: ['../boostrap']
});
define(['jquery', 'bootstrap'], function($) {
$(function() {
console.log('hello world!');
});
});
--或--
/js/main.js
require.config({
baseUrl: '/js/vendor/'
});
require.config({
baseUrl: '/js/vendor/'
});
require(['jquery', 'bootstrap'], function($) {
$(function() {
console.log('hello world!');
});
});
require.config({
baseUrl: '/js/vendor/',
deps: ['../boostrap']
});
define(['jquery', 'bootstrap'], function($) {
$(function() {
console.log('hello world!');
});
});
/js/boostrap.js
require.config({
baseUrl: '/js/vendor/'
});
require.config({
baseUrl: '/js/vendor/'
});
require(['jquery', 'bootstrap'], function($) {
$(function() {
console.log('hello world!');
});
});
require.config({
baseUrl: '/js/vendor/',
deps: ['../boostrap']
});
define(['jquery', 'bootstrap'], function($) {
$(function() {
console.log('hello world!');
});
});
注意require()
已成为引导文件中的define()
,您的配置正在异步模式下执行。当建立第一个require
调用时,您的配置尚未应用。根据文档:
加载require.js
时,它将注入另一个脚本标记
(带有async属性)用于scripts/main.js
因此,只需在同步模式下执行配置:
<script src="/js/vendor/require-jquery.js"></script>
<script src="/js/main.js"></script>
<script>
require(['jquery', 'bootstrap'], function($) {
$(function() {
console.log('hello world!');
});
});
</script>
需要(['jquery','bootstrap'],函数($){
$(函数(){
log('helloworld!');
});
});
更多信息:谢谢Simon。我在EJS中使用布局和分区,所以我实际上使用了第三个选项,即在添加任何JS之前定义一个全局require对象,我将我的选项放在那里。文档在这里讨论: