Javascript 如何正确配置requireJS
嗨,我正在尝试为SPA项目制作起始模板,主要使用: RequireJS、KnockoutJS、TypeScript等 我很难弄清楚如何配置路径和文件夹结构,以使RequireJS正常工作 以下是我的文件夹结构:Javascript 如何正确配置requireJS,javascript,requirejs,single-page-application,amd,Javascript,Requirejs,Single Page Application,Amd,嗨,我正在尝试为SPA项目制作起始模板,主要使用: RequireJS、KnockoutJS、TypeScript等 我很难弄清楚如何配置路径和文件夹结构,以使RequireJS正常工作 以下是我的文件夹结构: Scripts app components main.js lib knockout.js jquery.js 以下是我的RequireJS配置文件: var config = { waitSeconds: 15, paths:
Scripts
app
components
main.js
lib
knockout.js
jquery.js
以下是我的RequireJS配置文件:
var config = {
waitSeconds: 15,
paths: {
app: '../app',
'knockout': '/lib/knockout-3.4.2.',
sammy: '/lib/sammy-0.7.5.',
jquery: '../scripts/lib/jquery-1.10.2.'
}
};
这是我对main.js的尝试:
define(['jquery', 'PageOne', 'PageTwo'], function ($, pageOne, pageTwo) {
$(document).ready(function () {
var app = Sammy('#main', function () {
this.get('#/pageOne', function () {
pageOne.activate();
});
this.get('#/pageTwo', function () {
pageTwo.activate();
});
});
app.run();
});
});
这是我的Index.cshtml脚本标记:
<script src="~/Scripts/lib/require.js" data-main="scripts/app/components/main"></script>
我在不同的项目中看到,config在header中被调用,所以这是在html header中:
<script src="~/Scripts/app/config/require.config.js"></script>
我的问题是,在main.js中,它在datamain(scripts/app/components/)中定义的路径下查找jquery,但我的jquery在scripts/lib文件夹中
我想通过一整天的在线阅读来找出答案,但是时间太多了,我需要有人给我一些提示,这是怎么回事
真的很难弄明白这一点,而RequireJS网站对我并没有帮助
注意:我是基于JavaScript项目的初学者,第一次尝试,
从未使用过RequireJS
您的配置文件不起任何作用。根据您的描述,我假设加载它的
script
元素位于加载RequireJS的script
元素之前。这是配置RequireJS的一种有效方法,但是如果您希望RequireJS选择配置,您需要在加载RequireJS之前设置全局变量require
,RequireJS将使用require
的值作为其配置。现在您正在设置config
,这被RequireJS忽略。因此:
var require = {
waitSeconds: 15,
// etc...
一旦配置生效,您应该能够将data main
缩减为data main=“components/main”
我在
路径
配置中看到一些路径以点结尾。这很可能是您的一个错误,或者您有一些非常奇怪的文件名。我认为变量的名称由我决定,我在var require上设置了它,作为我之前查看的一个示例,但出于某种原因,它开始给我一些错误(在某些requirejs文件中)我无法构建,所以我将其重命名为config,认为这无关紧要。。。是的,圆点部分又是我的错了哈哈。。。我要再试一次。感谢您的提示…我将var重命名为var require,并得到以下错误:“变量'require'的类型必须为{waitSeconds:number;路径:{app:string;knockout:string;sammy:string;jquery:string;};…”,但这里的类型为'require'你知道是什么导致了这个错误消息吗?我在RequireJS的源代码中没有看到任何会导致这个错误的东西。(此外,没有理由这样做。)这是在运行时发生的吗?这是在构建项目时发生的吗?(你提到了TypeScript,所以我假设你有一些构建步骤。)您好,显然这个错误来自require.d.ts文件,它是require的requirejs.TypeScript.DefinitelyTyped库…所以我想这是一个TypeScript错误,我正在网上寻找一些解决方案,这只是一些黑客,lolI不会像您那样编辑require.d.ts
文件。这会削弱整个应用程序的类型安全性我上面的建议也削弱了类型安全性,因为require
的值是其类型所不允许的,但问题的风险只存在于在加载RequireJS之前执行的代码中,并且会以某种方式访问require
。风险很小。