您的位置:首页 > Web前端 > Webpack

Webpack5分钟入门教程

2016-04-20 10:07 921 查看
Webpack5分钟入门教程
前面讲解了Javascript模块化编程:模块的写法,下面我们来介绍一个具体的moduleloader—Webpack。

我们新建三个js文件,module1.js module2.js 和scripts.js

在module1.js中写入:

console.log('moudle 1 stuff');

在module2.js中写入:

console.log('moudle 2 stuff');

在scripts.js中写入:

require('./module1.js');

require('./module2.js');
scripts.js中的意思为包含前面两个模块,js本身是不支持模块化加载的,这里需要使用webpack对require这种特殊的语法进行处理.

首先我们全局安装webpack

npm –install –g webpack

然后再项目目录写好webpack的配置文件

var debug = process.env.NODE_ENV !== "production";
var webpack = require('webpack');

module.exports = {
context: __dirname,
devtool: debug ? "inline-sourcemap" : null,
entry: "./js/scripts.js",
output: {
path: __dirname + "/js",
filename: "scripts.min.js"
},
plugins: debug ? [] : [
new webpack.optimize.DedupePlugin(),
new webpack.optimize.OccurenceOrderPlugin(),
new webpack.optimize.UglifyJsPlugin({ mangle: false, sourcemap: false }),
],
};


理解这个配置文件需要前面的知识

这里用直接覆盖exports为一个对象的方式,导出对外接口. 在avascript模块化编程:模块的写法有介绍

以上配置文件的含义为:

如果环境为production,则dubug模式为假,模块导出时候,会根据是否为debug模式进行一些配置:

如exports输出对象的devtool属性:如果为测试模式,则把map内联到文件中方便调试.(map文件的作用是,当你对文件进行丑化--uglify(把函数或变量的长单词换成简单字母,依此来压缩),你很可能找不到那单个字母原本对应的完成的函数名/变量名是什么,很难看懂,很难调试,好在丑化的时候,他会生成一个map信息,保持了单个字母到原来单词的对应,方便调试,类似的思想在sass中也有体现).

如果非debug模式,pulgins中指明了需要使用的插件:Dedupe意思是压缩,occurrenceOrder意思为模块去重(如果两个文件都require同一个模块,同时有两个一样的模块岂不很费空间).uglify前面已经介绍了把长单词换成简单字母, 把函数或变量的长单词换成简单字母,依此来压缩.

entry:指明要处理的条目

output:指明输出目录和输出的文件名.

配置好以后,我们就可以在配置文件所在的目录下运行webpack命令来实现模块化处理.



最上面的scripts.min.js就是我们调用webpack生成的文件



我们打开看一下:

/******/ (function(modules) { // webpackBootstrap
/******/   // The module cache
/******/   var installedModules = {};
/******/
/******/   // The require function
/******/   function __webpack_require__(moduleId) {
/******/
/******/      // Check if module is in cache
/******/      if(installedModules[moduleId])
/******/         return installedModules[moduleId].exports;


出现这个样子就表示,require这个特别的模块化函数,被正确的处理了.

当然webpack的用途远不止加载模块这么简单,还可以用它来监视js的改变,如果有改变,则立即重新生成js:

使用webpack –watch 即可实现

还可以做到DreamWeaver的效果,即所见即所得的编辑效果,对静态文件的修改,可以立即体现到浏览器上

使用webpack –dev-server –content-base src –inline –hot(hot意思为热插拔,对静态文件改变后浏览器会自动刷新,以前都是改变了之后,手动刷新,手都按酸了有没有? 现在静态文件改变后可以自动刷新了,很爽吧)

也可以代替或者联合gulp grunt的流程化处理的功能:压缩 丑化等

这里提一下:很多浏览器还不支持ES6,但我们可以用ES6的写法,到时候Babel会自动帮我们把ES6的语法转变为ES5的,这样就可以解决浏览器对ES6的支持问题.

package.json中的script段

“scripts”:

{

“dev”:”命令”

}

这样你使用npm run dev时,便会执行dev对应的命令,你可以按照需要,改成自己需要的形式.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: