在webpack 2中使用自己的模块

时间:2017-03-01 15:49:27

标签: javascript module amd webpack-2

目前我正在努力了解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可以全局访问,该怎么办?

1 个答案:

答案 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;
       }
   }
});