什么是模块打包工具

时间:2023-02-02 18:38:47
认识到webpack可以认识import,可以翻译index.js。可能我们就认为webpack就是js的一个翻译器。划重点,,,不是的。。。
 
webpack实际上称不上是一个翻译器,因为呢,他只认识import这样的语句,其它高级的js语法,他一概不认。所以把webpack看作一个js翻译器,实际上是高看了他,我们去搜索webpack的定义,是这样的
webpack is a module bundler
webpack实际上是一个模块打包工具

 

index.js
import Header from './header';
import Sidebar from './sidebar';
import Content from './content';

new Header();
new Sidebar();
new Content();

header.js

function Header() {
  var dom = document.getElementById('root');
  var header = document.createElement('div');
  header.innerText = 'header';
  dom.appendChild(header);
}
export default Header;

siderbar.js

function Sidebar() {
  var dom = document.getElementById('root');
  var sidebar = document.createElement('div');
  sidebar.innerText = 'sidebar';
  dom.appendChild(sidebar);
}

export default Sidebar;
content.js
function Content() {
  var dom = document.getElementById('root');
  var content = document.createElement('div');
  content.innerText = 'content';
  dom.appendChild(content);
}
export default Content;

 

我们看之前这个文件,Header是什么呢,是一个模块,Sidebar和Content一样,也是一个模块。webpack的作用实际上可以把这些模块打包到一起的这样一个工具。所以他叫做模块打包工具。所以一看到import,就应该想到后面是一个模块。

 

我们在写代码的时候,不仅碰到过ES Moudule这样的模块规范,还有commonJS(node里面最常用的模块规范),CMD,AMD。
这样的模块规范,webpack一样可以正确的识别。举个例子,我们把index.js的方式改成commonJS的方式。

 

var Header = require('./header.js');
var Sidebar = require('./sidebar.js');
var Content = require('./content.js');


new Header();
new Sidebar();
new Content();

 

commonJS是require这样的导入方式,如果这样导入的话,相应的导出模块也要有相应的变化。不再是是export default的方式了。要用commonJS的规范

 

header.js
function Header() {
var dom = document.getElementById('root');
var header = document.createElement('div');
header.innerText = 'header';
dom.appendChild(header);
}
module.exports = Header;
sidebar.js
function Sidebar() {
var dom = document.getElementById('root');
var sidebar = document.createElement('div');
sidebar.innerText = 'sidebar';
dom.appendChild(sidebar);
}


module.exports = Sidebar;
content.js
function Content() {
var dom = document.getElementById('root');
var content = document.createElement('div');
content.innerText = 'content';
dom.appendChild(content);
}
module.exports = Content;

 

这样就可以了,module.exports是commonJS的导出方式,webpack是一个模块打包工具,他可以识别出任何模块引入的语法。

 

所以到这,就可以很明显的知道webpack不是翻译器,他是一个模块打包工具。最早的时候,webpack推出的时候,他是一个js的模块打包工具。随着webpack的发展,他已经不仅仅是js文件了。他还可以打包其它任何形式的模块文件。比如在react,vue的框架里面
var style = require('./index.css');
或
import style from './index.css';
他还可以打包jpg,png这样的图片文件,他可以打包任何你想打包的内容,所以webpack准确的定义,他就是一个模块打包工具。