使用Webpack来要求显示模块

我刚刚开始研究Javascript所提供的所有主要的东西,主要是Webkit 。 我有一个体面的大小的应用程序使用揭示模块模式。 这些模块调用其他模块的公共function进行计算并返回结果。

使用这种模式的工作很好,直到我开始考虑在我的html页面中包含数十个脚本。 所以,我们在这里…

为了这个问题的目的,我已经做了一个更简单的应用程序来展示我的错误。

我有两个JavaScript模块包含在自己的文件中:

 // one.js require("babel-loader?two!./two.js"); var one = (function(){ two.sayHello(); })() // two.js var two = (function(){ var sayHello = function(){ console.log('Hello World'); } return { sayHello: sayHello } })() 

我想要做的是使用two.js中的one.js sayHello函数。

所以,我首先安装了Webpackexports-loader并创build了下面的configuration文件:

 module.exports = { entry: './index.js', output: { path: __dirname, filename: 'bundle.js' }, module: { loaders: [ { test: /\.jsx$/, loader: "babel-loader", query: { presets: ['es2015'] } } ] } } 

index.js是我的入口文件,只包含以下单行:

 require('./one.js'); 

现在,当试图运行这个代码时,在控制台中出现以下错误:

未捕获的ReferenceError:两个没有定义

多一点挖,我发现我编译bundle.js文件时试图导入two.js抛出以下错误:

抛出新的错误(“模块parsing失败:\ testing_env \ webpack \ two.js'导入'和'导出'可能只出现在顶层(2:2)\ n您可能需要一个适当的加载器来处理这种文件types。

显然我做错了什么,我只是不知道是什么。 我已经尝试了exports-loaderbabel-loader但没有喜悦。

我应该使用哪个加载器来parsing模块依赖关系?

任何帮助将不胜感激。

开箱即用的webpack支持CommonJS (与Nodejs实现的模块系统相同) 。 这意味着您需要使用require / export语法来使用模块。

要导出模块中的内容,只需执行以下操作:

 // a.js function a() { console.log("I'm a module '); } module.exports = a; 

并在你的其他模块中做:

 // b.js const a = require('./a.js'); a(); // I'm a module 

require()将简单地返回exports对象。 无论你把它放在它上面,你将能够在另一个模块中检索。

这就是为什么webpack是一个模块打包机,它带有一个内置的模块系统。 如果你不使用模块打包器直接在浏览器中加载你的JS文件,并且想要封装数据(在“模块”中),那么模板模式更加实用。

Revelaing模块模式在没有模块系统的时候很有用,你只需要在浏览器中加载你的JS文件。 当ES模块在浏览器中引入时,直到最终,JavaScript没有自己的模块系统。 这就是为什么人们想出了模块模式,有一种方法来在浏览器中封装逻辑。 但是现在由于像webpack这样的工具,现在我们已经有了ES Modules的系统,所以我们可以有更好的方式来封装我们的逻辑。

这有道理吗?