webpack 极简教程(前端自动化构建)

Webpack 是什么

模块打包器 (module bundler). 能够将任何资源如 JavaScript 文件、CSS 文件、图片等打包成一个或少数文件。

Webpack 是一个前端资源加载/打包工具。它将根据模块的依赖关系进行静态分析,然后将这些模块按照指定的规则生成对应的静态资源。

image.png

WebPack 做的事情是: 分析你的项目结构,找到JavaScript模块以及其它的一些浏览器不能直接运行的拓展语言(Scss,TypeScript等),并将其打包为合适的格式以供浏览器使用。

安装

npm install webpack -g

当前目录安装:

npm install webpack webpack-cli  --save-dev

快速上手实例

极简例子:

index.js

import _ from 'lodash';

function component() {
    let element = document.createElement('div');

    // Lodash, currently included via a script, is required for this line to work
    element.innerHTML = _.join(['Hello', 'webpack'], ' ');

    return element;
}

document.body.appendChild(component());

index.html

<!doctype html>
<html>
<head>
    <title>Getting Started</title>
    <!--<script src="https://unpkg.com/lodash@4.16.6"></script>-->
</head>
<body>
<script src="main.js"></script>
</body>
</html>

package.json

{
  "name": "hello_webpack",
  "version": "1.0.0",
  "description": "",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "build": "webpack --config webpack.config.js"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "webpack": "^4.26.0",
    "webpack-cli": "^3.1.2"
  },
  "dependencies": {
    "lodash": "^4.17.11"
  }
}

webpack.config.js

const path = require('path');

module.exports = {
    mode: "development", // "production" | "development" | "none"
    entry: './src/index.js',
    output: {
        filename: 'main.js',
        path: path.resolve(__dirname, 'static')
    }
};

注:__dirname 是node.js中的一个全局变量,它指向当前执行脚本所在的目录。

源码地址:https://github.com/microu2018/hello_webpack

https://segmentfault.com/a/1190000010871559 https://webpack.js.org/guides/getting-started/ https://github.com/ruanyf/webpack-demos

webpack,gulp/grunt,npm,它们有什么区别?

webpack 是模块打包器(module bundler),把所有的模块打包成一个或少量文件,使你只需加载少量文件即可运行整个应用,而无需像之前那样加载大量的图片,css文件,js文件,字体文件等等。

而gulp/grunt 是自动化构建工具,或者叫任务运行器(task runner),是把你所有重复的手动操作让代码来做,例如压缩JS代码、CSS代码,代码检查、代码编译等等,自动化构建工具并不能把所有模块打包到一起,也不能构建不同模块之间的依赖图。

两者来比较的话,gulp/grunt 无法做模块打包的事,webpack 虽然有 loader 和 plugin可以做一部分 gulp/grunt 能做的事,但是终究 webpack 的插件还是不如 gulp/grunt 的插件丰富,能做的事比较有限。

于是有人两者结合着用,将 webpack 放到 gulp/grunt 中用。然而,更好的方法是用 npm scripts 取代 gulp/grunt.

npm 是 node 的包管理器 (node package manager),用于管理 node 的第三方软件包,npm 对于任务命令的良好支持让你最终省却了编写任务代码的必要,取而代之的,是老祖宗的几个命令行,仅靠几句命令行就足以完成你的模块打包和自动化构建的所有需求。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏地方网络工作室的专栏

Vue2+VueRouter2+Webpack+Axios 构建项目实战2017重制版(十二)打包项目图片等资源的处理

Vue2+VueRouter2+Webpack+Axios 构建项目实战2017重制版(十二)打包项目图片等资源的处理 前情回顾 在《Vue2+VueRoute...

20470
来自专栏北京马哥教育

Python操作OpenOffice

OpenOffice是一个免费的、开源的办公套装,集成了允许开发者用不同语言进行开发的API。Python-UNO让你可以在Python环境下使用OpenOff...

1K80
来自专栏web前端

smartClient 1--框架介绍

    快速构建 大型企业应用开发(无需过多关注UI),适合基于云技术的应用,主要关注业务的发展和营销,加快开发进程

12400
来自专栏Rovo89

配置React开发环境教程

13420
来自专栏一“技”之长

iOS 封装静态库(.a文件) 原

iOS中导入外部文件,一种是将源码导入,一种是导入静态库,有很多第三方库都是以静态库的形式提供给我们使用的,如何制作一个静态库呢?

10230
来自专栏CSDN技术头条

由浅入深学习JavaScript Debug技巧

我常常看到不少开发者不懂如何Debug JavaScript代码,因此决定写一篇博客为初学者介绍如何Debug。我希望这篇文章可以提供一些有用的信息。我尝试在本...

19590
来自专栏西枫里博客

宝塔面板下升级到PHP7.2,无法查看phpinfo的解决办法。

自从建站后没多久,就把PHP的版本升级到7了,后续有升级到7.2了,一直也没关注过phpinfo的信息,今天小伙伴在群里说我草,phpinfo都看不到,我大概想...

22120
来自专栏web前端

smartClient 1--框架介绍

一、是什么(以下简称SC)     smartClient 是一个基于web技术的开发框架,主要包括: 一个无需安装的 Ajax/HTML5 客户端引擎 UI组...

28180
来自专栏FreeBuf

前端黑魔法之远程控制地址栏

由于今天看到一篇文章《危险的 target=”_blank” 与 “opener”》,里面提到了一个老知识点,就是target=”_blank”的时候,新打开的...

36640
来自专栏九彩拼盘的叨叨叨

Web Workers 介绍

有时候,我们写的脚本需要执行一些耗时的大计算量的操作。在脚本执行过程中,浏览器会出现冻结用户界面的情况(用户对页面进行操作,但浏览器没有响应)。

8920

扫码关注云+社区

领取腾讯云代金券