超详细!webpack入门教程(一)

本文作为webpack小白入门文章,会详细地介绍webpack的用途、具体的安装步骤、注意事项、一些基本的配置项,并且会以一个具体的项目实例来介绍如何使用webpack。另外,本文会简单地介绍一些最新的webpack4在安装、使用中需要注意的要点。

1.webpack是什么,用来做什么

webpack是一个前端构建工具。那么什么是构建工具呢?

前端构建工具就是把开发环境的代码转化成运行环境代码。一般来说,开发环境的代码是为了更好的阅读,而运行环境的代码则是为了能够更快地执行。因此开发环境和运行环境的代码形式也不相同。比如,开发环境的代码,要通过混淆压缩后才能放在线上运行,这样代码体积更小,而且对代码执行也不会有任何影响。一般需要构建工具处理的几种情况:

  • 代码压缩

将JS、CSS代码混淆压缩,让代码体积更小,加载更快

  • 编译语法

编写CSS时使用Less、Sass,编写JS时使用ES6、TypeScript等,这些标准目前都无法被浏览器兼容,因此需要构建工具编译,例如使用Babel编译ES6语法。

  • 处理模块化:

CSS和JS的模块化语法,目前都无法被浏览器兼容。因此开发环境可以使用既定的模块化语法,但是需要构建工具将模块化语法编译为浏览器可识别形式。例如使用webpack、Rollup等处理JS模块化。

其他的构建工具:最早普及使用的是Grunt,后面又出现Gulp。Webpack是目前流行的构建工具,可以说是构建工具的神器,学习成本较高。

2.安装webpack

-- 第一步,安装Node.js:

安装webpack前,你需要先安装Node.js,可以去Node.js官网下载,安装完成后,运行命令来查看是否安装成功:

node -v

需要注意的是webpack4官方不再支持node4以下的版本,依赖的node环境版本>=6.11.5,当然考虑到最佳的ES6特性实现,建议node版本可以升级到V8.9.4或以上版本,具体更新说明部分可以见:webpack4更新日志

下面就全局安装webpack,运行:

npm install -g webpack

--第二步,创建配置项:

安装完Node.js后,新建一个项目目录,进入目录后,执行:

npm init

按提示输入项目的名称、版本、描述、作者等信息,如果你不准备在npm中发布你的模块,这些答案都不重要,一路回车默认也可。之后就会在该目录下出现一个package.json文件,打开可以看到刚才输入的信息:

{
    "name": "example",
    "version": "1.0.0",
    "description": "for introduction",
    "main": "index.js",
    "scripts": {
        "test": "echo \"Error: no test specified\" && exit 1"
    },
    "author": "lynnshen",
    "license": "ISC"
}

--第三步,安装webpack:

需要把它安装到devDependencies,运行:

npm install --save-dev webpack

可以看到package.json中,devDependencies中有了webpack,版本号是4.17.1:

{
    "name": "example",
    "version": "1.0.0",
    "description": "for introduction",
    "main": "index.js",
    "scripts": {
        "test": "echo \"Error: no test specified\" && exit 1"
    },
    "author": "lynnshen",
    "license": "ISC",
    "devDependencies": {
        "webpack": "^4.17.1"
    }
}

npm安装注意两点

(1)安装时如未指定版本号,则按最新的版本安装,这里webpack安装的是最新的4.17.1的版本

(2)npm install --save和npm install --save-dev的区别:

--save 会把依赖包名称添加到 package.json 文件 dependencies 键下,--save-dev 则添加到 package.json 文件 devDependencies 键下。dependencies是发布后还依赖的,devDependencies是开发时的依赖。

--第四步,安装webpack-cli:

注意:如果安装的是webpack v4+版本,则还需要安装webpack-cli或者webpack-command,否则webpack命令运行不了。执行:

npm uninstall webpack-cli //卸载本地安装的webpack-cli
npm install -g webpack-cli//全局安装webpack-cli
npm install --save-dev webpack-cli //把webpack-cli安装到devDependencies

这里我安装的是webpack-cli

先全局安装,再--save-dev安装后,可以看到package.json中增加webpack-cli:

{
    "name": "example",
    "version": "1.0.0",
    "description": "for introduction",
    "main": "index.js",
    "scripts": {
        "test": "echo \"Error: no test specified\" && exit 1"
    },
    "author": "lynnshen",
    "license": "ISC",
    "devDependencies": {
        "webpack": "^4.17.1",
        "webpack-cli": "^3.1.0"
    }
}

3.项目实例

在该目录下创建src文件夹,其中一个是入口文件app.js,一个是真正写页面的work.js。入口文件用来引入真正写页面的JS文件、CSS文件。

work.js内容:

document.write('欢迎阅读webpack入门教程')

app.js内容:

var dt = require('./work.js')

然后,再返回上一层目录,新建index.html文件(该文件和src属于同一层级),内容是:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8"> 
        <title>test</title> 
    </head>
    <body> 
        <div>test</div> 
        <script src='./dist/main.js'></script> 
    </body> 
</html>

总结一下,目前项目的文件目录是:

文件目录

在命令行中执行:

webpack 项目入口文件的地址

这里是执行:

webpack src/app.js 

如果发现报错:

Cannot find module ‘webpack’

这是因为没有安装webpack-cli或者webpack-command,请回到安装的第四步进行安装。

如果看到这个,恭喜你打包成功:

执行:webpack 入口文件地址

打包成功后,就会在项目目录下多出一个dist文件夹,里面有个main.js,index.html中<script>,引入的就是这个打包后的webpack文件地址。然后用浏览器打开index.html,可以看到:

这就是webpack的一个简单用法。

但是如果这样使用,每次编译都要输入webpack的入口文件路径,非常麻烦。可以通过编写webpack,来进行简化:

编写 webpack 配置文件

--新建webpack.config.js,内容是:

const path = require('path');
const webpack = require('webpack'); 
module.exports = { 
    entry:{
        app:__dirname+'/src/app.js',//唯一入口文件,__dirname是nodejs里的一个全局变量,它指向的是我们项目的根目录
    },
    output:{
        path: path.resolve(__dirname, './dist'),//打包后的文件存放的地方
        filename:'bundle.js'   //打包后输出文件的文件名
    }
};

注意,这里把打包后输出的文件名命名为bundle.js,所以在index.html中需要修改引入的js文件名,index.html的内容是:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8"> 
        <title>test</title> 
    </head>
    <body> 
        <div>test</div> 
        <script src='./dist/bundle.js'></script> 
    </body> 
</html>

把原来打包后的dist/main.js删掉,命令行执行:

webpack

可以看到打包成功,在项目的dist文件中出现bundle.js:

执行:webpack

浏览器打开index.html,发现正常显示:

注意,命令行直接执行webpack,前提是全局安装了webpack,如果不是全局安装,还需要在后面加上入口文件的路径。

如果不是全局安装webpack,也不想在后面加上入口文件的路径,因为这种写法比较麻烦,那怎么办呢?

可以在package.json中设置start关键字。start是Node.js的变量,相当于js的var,是一个关键字:

{
    "name": "example",
    "version": "1.0.0",
    "description": "for introduction",
    "main": "index.js",
    "scripts": {
        "start": "webpack",
        "test": "echo \"Error: no test specified\" && exit 1"
    },
    "author": "lynnshen",
    "license": "ISC",
    "devDependencies": {
        "webpack": "^4.17.1",
        "webpack-cli": "^3.1.0"
    }
}

然后测试下:删除dist下打包后的文件bundle.js,命令行执行:

npm start

可以看到打包成功,在项目的dist文件中出现bundle.js:

执行:npm start

浏览器打开index.html,发现正常显示。

如果不用“start”,而是其他的名字,如“dev”:

{
    "name": "example",
    "version": "1.0.0",
    "description": "for introduction",
    "main": "index.js",
    "scripts": {
        "dev": "webpack",
        "test": "echo \"Error: no test specified\" && exit 1"
    },
    "author": "lynnshen",
    "license": "ISC",
    "devDependencies": {
        "webpack": "^4.17.1",
        "webpack-cli": "^3.1.0"
    }
}

则在命令行要执行:

npm run dev

注意写法,执行npm dev是不可以的。

执行:npm run dev

在Webpack4.0中,通过mode指定环境。用于配置运行环境,mode的值可以为development,表示的是开发模式,或者是production,表示的是生产模式。webpack 会将 production 作为 mode 的默认值去设置。这里在package.json中修改:

{
  "name": "example",
  "version": "1.0.0",
  "description": "for introduction",
  "main": "index.js",
  "scripts": {
    "dev": "webpack --mode development",
    "build":"webpack --mode production",
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "lynnshen",
  "license": "ISC",
  "devDependencies": {
    "webpack": "^4.17.1",
    "webpack-cli": "^3.1.0"
  }
}

命令行执行:

npm run dev

打包出来的bundle.js格式则是这样的,大小是4.25KB:

运行模式下打包出的文件

命令行执行:

npm run build

打包出来的bundle.js格式是这样的,大小是1001B:

生产模式下打包出的文件

可以看出生产模式相对运行模式,会更多地压缩代码体积大小。

至此,本文从安装到使用,详细地介绍了webpack的使用方法,如有问题,欢迎指正。

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏从零开始的linux

alias命令

aslias命令用来设置指令的别名.我们可以使用该命令可以将一些较长的命令简化.使用alias命令时,用户必须使用单引号将原来的命令引起来,防止特殊字符导致错误...

2606
来自专栏Youngxj

网站打包成app 博客打包成手机软件教程

1754
来自专栏hbbliyong

OpenGL学习笔记:Console工程下如何不显示控制台黑窗口只显示Windows窗口

刚学习OpenGL,绘制图形的时候,如果不进行设置,运行的时候会先出现黑窗口再出现Windows窗口。 其实要去除控制台窗口非常简单,只需要修改工程设置,把子系...

3327
来自专栏分享达人秀

JDK的正确安装和配置

JDK的全称是Java Development Kit,翻译成中文就是Java开发工具包,主要包括Java运行环境、一些Java命令工具和Java基础的...

1996
来自专栏柠檬先生

Sass与Compass——回顾

compass 是sass的一个工具库   compass在sass 的基础上封装了一系列有用的模块,用来补充和丰富sass的工能, 安装:     comp...

1928
来自专栏张戈的专栏

Linux:mv 命令的10个实用例子

当你想要将文件从一个位置移动到另一个地方并且不想复制它,那么 mv 命令是完成这个任务的首选。本文中总结了十个 Linux mv 命令的实例,希望能给大家带来一...

4137
来自专栏Java后端生活

Linux(九)实用指令

1403
来自专栏机器学习与自然语言处理

Linux系统常用命令总结

1. 最关键的命令 man echo 2. 目录文件操作命令 ls: 查看目录下的文件信息或文件信息 dir: pwd: 打印当前路径 cd:改变路径 mkdi...

1885
来自专栏数据和云

Oracle 12c支持多线程模式

在Oracle Database 12c中,Oracle引入了多线程模式,允许在Windows平台之外的Unix、Linux系统使用多线程模式,结合多进程与多线...

3175
来自专栏Java帮帮-微信公众号-技术文章全总结

Linux命令(面试+工作版)

Linux命令(面试+工作版) ? ? ? ? ? ? ? 1. tar 创建一个新的tar文件 ? 解压tar文件 ? 查看tar文件 ? 2. grep 在...

4254

扫码关注云+社区