目前我正在努力了解Webpack和AMD。这是我为学习目的而编写的一个简单示例。我的问题是我如何访问Model()?这没有按预期工作,因为我的浏览器控制台给了我一个引用错误。我希望Model在全球范围内。
webpack.config.js:
var path = require('path');
var webpack = require('webpack');
const config = {
output : {
filename : '[name].bundle.js',
path : 'assets'
},
entry : {
main : ['./entry.js']
}
};
module.exports = config;
的test.html:
<html>
<head>
<meta charset="utf-8">
</head>
<body>
<script type="text/javascript" src="assets/main.bundle.js" charset="utf-8"></script>
</body>
</html>
entry.js:
require("./mod1");
test = new Model();
document.write(test.calculate());
mod1.js:
define([] ,function(){
return function(){
function Model() {
var model = this;
model.test = "bla";
model.calculate = function(){
return model.test + 45;
}
}
}
});
更新1 经过一些实验,我发现返回一个对象对我有用,可以改变entry.js
mod1.js:
define([] ,function(){
var result = new Object();
result.Model = function(){
var model = this;
model.test = "bla";
model.calculate = function(){
return model.test + 45;
}
}
return result;
});
entry.js:
var mod1 = require("./mod1");
var test = new mod1.Model();
document.write(test.calculate());
此时有一个新问题。如果我希望Model可以全局访问,该怎么办?
答案 0 :(得分:1)
不返回Model
函数。尝试
define([] ,function(){
return function(){
return function Model() {
...
}
}
}
更新
此外,您需要一个变量来保存返回的模块。尝试:
var mod1 = require("./mod1");
在entry.js
中,您应该可以var test = new mod1.Model();
更新2:
删除mod1.js中的包装函数,它应如下所示:
define([] ,function(){
return function Model() {
var model = this;
model.test = "bla";
model.calculate = function(){
return model.test + 45;
}
}
});