use*_*573 9 javascript requirejs
我目前正在使用一个Javascript应用程序,该应用程序正在使用带有"模块模式"的多个javascript文件.像这样:
var app = app || {};
app.moduleName = app.moduleName || {};
app.moduleName = function () {
// private property
var someProp = null;
return {
// public method
init: function () {
return "foo";
}
};
}();
Run Code Online (Sandbox Code Playgroud)
我使用它的原因是为了构建我的代码.我可以通过调用app.moduleName.init()来调用方法或属性.
这样做的一个缺点是我必须<script src="app.moduleName.js">在我的HTML中包含很多..等等.
为了解决这个问题,我遇到了RequireJS,我阅读了文档.但我不太确定如何在我现有的结构中合并它,而无需在现有的javascript文件中添加大量代码.
有人有任何建议如何实现这一目标?
Mar*_*one 10
您可以使用require.js构建模块树.
// in main.js
require.config({/*...*/});
require(
['app'],
function (app) {
// build up a globally accessible module tree
window.app = app;
var foo = window.app.moduleName.init(); // returns "foo"
}
);
// in app.js
define(
['moduleName'],
function(moduleName){
return {
moduleName: moduleName;
}
}
);
// in moduleName.js
define(function(){
// private property
var someProp = "foo";
return {
// public method
init: function () {
return someProp;
}
}
});
Run Code Online (Sandbox Code Playgroud)
但是,使用require.js,您可以在没有像这样的全局模块树的情况下构建您的应用程序......即使您可以轻松实现.您可以单独访问模块的所有部分.无论你在define/require回调中返回什么,都将被require.js存储为引用.知道这件事很重要.因此,可以在应用程序中包含两次脚本,并具有相同的对象或实例.例如,如果您包含这样的模块
// in SomeClass.js
define(function () {
function SomeClass() {
this.myValue = true;
}
return new SomeClass();
});
// app.js
define(
['SomeClass', 'someComponent'],
function (SomeClass, someComponent) {
return {
init: function () {
SomeClass.myValue = false;
someComponent.returnClassValue(); // logs false
}
};
}
);
// someComponent.js
define(
['SomeClass'],
function (SomeClass) {
return {
returnClassValue: function () {
console.log(SomeClass.myValue); // false
}
};
}
);
Run Code Online (Sandbox Code Playgroud)
SomeClass.myValue的值在所有包括模块中都是相同的......