webpack 4 简单介绍

webpack是什么?

webpack是一个现代JavaScript应用程序的静态模块打包器(module bundler)。

为什么要使用webpack呢?

随着web技术的发展,前端开发不再仅仅是静态网页的开发,前端代码的逻辑和交互越来越复杂。

回想一下最初我们如何开发一个页面,切图、写样式、用JQuery写一写JS效果,页面开发完就能直接在浏览器里查看。我们手动编译(比如用koala编译less),手动压缩(比如用compress压缩css),手动对比代码(比如用compare对比代码)。

而现在前端开发早已进入工程化和自动化,前端自动化构建工具可以帮我们完成这些重复且繁琐的工作。webpack就是前端构建工具的优秀代表。通过webpack我们可以方便快捷地处理包括JS、CSS、png、webfonts在内的资源文件。

webpack能做哪些事情呢?

  • 代码编译:把ES6转成ES5,把less编译成css等
  • 文件优化:压缩HTML、CSS、JavaScript代码,压缩合并图片等
  • 模块合并:把多个文件合成一个文件,减少http请求
  • 自动刷新:监听本地源代码的变化,自动重新构建,刷新浏览器
  • 代码校验:在代码被提交到仓库前校验代码是否符合规范
  • 自动发布:自动构建出线上发布代码并传输给发布系统

webpack如何实现这些功能呢?

webpack如何实现这些功能呢?

webpack如何实现这些功能呢?

webpack的核心概念:

  • 入口(entry)
  • 输出(output)
  • loader
  • 插件(plugins)

入口(entry):

指示webpack应该使用哪个模块,来做为构建其内部依赖图的开始。Webpack从入口开始递归解析出所有依赖的模块。

输出(output):

告诉webpack在哪里输出它所创建的bundles,以及如何命名这些文件,默认值是 ./dist。

备注:webpack配置是标准的Node.js CommonJS模块。path是Node.js 的核心模块,用于操作文件路径。

loader:

loader让webpack能够去处理那些非JavaScript文件(webpack自身只理解JavaScript)。loader 可以将所有类型的文件转换为 webpack 能够处理的有效模块,然后你就可以利用 webpack 的打包能力,对它们进行处理。

在webpack的配置中loader有两个目标:

  • test 属性:用于标识出应该被对应的loader进行转换的某个或某些文件。
  • use 属性:表示进行转换时,应该使用哪个loader。

插件(plugins):

loader被用于转换某些类型的模块,而插件则可以用于执行范围更广的任务。

想要使用一个插件,你只需要require()它,然后把它添加到 plugins 数组中。

配置webpack

一、安装webpack

全局安装 webpack 和 webpack-cli


npm i webpack webpack-cli -g

新建项目文件夹,初始化 webpack


npm init -y  #生成package.json文件,默认所有配置


npm i webpack webpack-cli -D  #在devDependencies环境中安装

备注:webpack4.0中webpack和webpack-cli已经拆分,需要单独安装

 

二、配置webpack

根目录下新建webpack.config.js文件(也可是使用其他文件名,但需要额外配置)。

设置入口和输出


const path = require(‘path‘)

const webpack = require(‘webpack‘)

module.exports = {

entry: ‘./src/index.js‘,

output: {

path: path.resolve(__dirname, ‘dist‘),

filename: ‘[name].js‘

}

}

三、常见文件的配置

Html在webpack中的配置

在开发环境中安装插件


npm i html-webpack-plugin

在webpack.config.js中引入插件


const HtmlWebpackPlugin = require(‘html-webpack-plugin‘)

在module.exports中配置插件


plugins: [

new HtmlWebpackPlugin({

file: ‘index.html‘,

template: ‘src/index.html‘

})

]

CSS在webpack中的配置

在开发环境中安装loader


npm i css-loader less less-loader style-loader

在开发环境中安装插件


npm i mini-css-extract-plugin -D

在webpack.config.js中引入插件


const MiniCssExtractPlugin = require(‘mini-css-extract-plugin‘)

在module.exports中配置loader


module: {

rules: [{

test: /\.(css|less|sass|sty)$/,

use: [

MiniCssExtractPlugin.loader,

"css-loader",

"less-loader"

]

}]

}

在module.exports中配置插件


plugins: [

new MiniCssExtractPlugin({

filename: ‘[name].[chunkhash:8].css‘,

chunkFilename: ‘[id].css‘

})

]

JS在webpack中的配置

根目录下新建.babelrc文件,简单配置下


{ "presets": ["env"] }

在开发环境中安装babel


npm i babel-core babel-loader babel-preset-env -D

在webpack.config.js文件里配置babel


module: {

rules: [{

test: /\.js$/,

include: [

path.resolve(__dirname, ‘src‘)

],

use: ‘babel-loader‘

}]

}

图片资源在webpack中的配置

在开发环境中安装loader


npm i file-loader -D

在module.exports中配置loader


module: {

rules: [{

test: /\.(png|jpg|gif)$/,

use: [{

loader: ‘file-loader‘

}]

}]

}

别名@在webpack中的配置

在module.exports中配置


resolve: {

extensions: [".js", ".json", ".jsx", ".less", ".css"],

alias: {

utils: path.resolve(__dirname, ‘src/utils‘)

}

}

npm run build

在package.json中定义脚本


"scripts": {

"build": "webpack --mode production"

}

执行npm run build脚本会启动webpack打包文件

npm run start

在package.json中定义脚本


"scripts": {

"start": "webpack-dev-server --mode development"

}

在module.exports中配置dev-server


devServer: {

port: ‘8080‘,

before(app) {

app.get(‘/api/test.json‘, (req, res) => {

res.json({

code: 200,

message: ‘Hello World‘

})

})

}

}

npm run start 在webpack里创建了一个node进程。

vue提供的webpack模板

vue-cli 是 Vue.js 的脚手架工具

安装

npm install -g vue-cli

用法

vue init <template-name> <project-name>

例如:vue init webpack my-project

vue官方示例:配置一个vue+webpack项目

第一步:全局安装vue-cli

npm install -g vue-cli

第二步:初始化一个基于webpack模块的新项目

vue init webpack my-project

第三步:安装依赖

cd my-project #进入新项目文件夹

npm install #安装依赖

第四部:启动项目

npm run dev

参考资料:

https://www.webpackjs.com/concepts/

https://www.webpackjs.com/guides/getting-started/

原文地址:https://www.cnblogs.com/dongfuxia/p/10405604.html

时间: 2024-08-30 02:35:30

webpack 4 简单介绍的相关文章

webpack的简单介绍

webpack是什么: 模块打包机,分析目录结构,找到js模块(包括浏览器不能直接识别的代码 typscript sass...),打包成合适       的格式供浏览器访问      模块打包 构建(项目)打包的优势(webpack的优势)    1 .模块化,拆分了业务复杂的js代码-->细小的文件    2. js拓展---> 基于原型面向对象--->基于class(typescript , es6)-->浏览器识别 webpack与gulp的区别: 1.webpack支持模

client高性能组件化框架React简单介绍、特点、环境搭建及经常使用语法

[本文源址:http://blog.csdn.net/q1056843325/article/details/54729657 转载请加入该地址] 明天就是除夕了 预祝大家新春快乐 [ ]~( ̄▽ ̄)~* 天天饭局搞得我是身心疲惫= = 所以更新比較慢 今天想跟大家分享的就是这个大名鼎鼎的React框架 简单介绍 React是近两年非常流行的框架 流行到什么程度呢? 我看了一下Github上的数据 React达到了5w8+的star 在JavaScript中star排名第4 受欢迎程度可见一斑

Vue项目的建立和目录的简单介绍

一.介绍 Vue是前端三大框架之一,另外两个分别是react.angular.其设计模式是MVVM的设计架构模式. 二.安装 2.1 node.js安装 在安装vue之前的时候,需要安装node.js.去官网下载http://nodejs.cn/,然后将其添加到系统环境中,在使用如下的指令进行查询 # 查询指令 node -v 结果 2.2 配置镜像源 配置镜像源可以加快安装的速度,使用如下的指令进行添加,类似于Python中的pip配置. # 在npm中配置镜像源的命令 npm config

python的列表,元组和字典简单介绍

引 入 java                                   python 存取多个值:数组或list集合 ------------------------> 列表,元组 key-value格式:    Map        ------------------------>    字典 自己学习发现,java跟python这两门面向对象语言在数据类型的定义上,很多思想都是互通的,这里不说java,简单介绍一下python的列表,元组和字典. 一.列表 List: 最通

javascript的return语句简单介绍

javascript的return语句简单介绍:return语句在js中非常的重要,不仅仅具有返回函数值的功能,还具有一些特殊的用法,有个清晰的把握是非常有必要的.下面就结合实例简单介绍一下return语句的作用.一.用来返回控制和函数结果:通常情况,return语句对于一个函数是很有必要的,因为往往需要函数在一系列的代码执行后会得到一个期望的返回值,而此值就是通过return语句返回,并且将控制权返回给主调函数.语法格式: return 表达式 代码实例如下: function add(){

Object-c集合的简单介绍

一.简单介绍 NSArray/NSMutableArray NSSet/NSMutableSet NSDictionary/NSMutableDictionary NSArray.NSSet.NSDictionary是不可变的,创建的时候初始化 NSMutableArray.NSMutableSet.NSMutableDictionary是可变的 二.使用介绍 NSArray是有序的数组 NSMutableArray *myArray=[[NSMutableArray alloc] init];

plsql的环境与介绍:环境的搭建和plsql的简单介绍

PLSQL编程 1.环境的搭建 (1)创建一个存储表空间 SQL> conn /as sysdbaConnected. SQL> create tablespace plsql datafile '/u01/oracle/oradata/ORCL/plsql01.dbf' size 1G; Tablespace created. (2)创建PLSQL用户SQL> create user plsql identified by plsql default tablespace plsql;

CSS之box-sizing的用处简单介绍

前几天才发现有 box-sizing 这么个样式属性,研究了一番感觉很有意思, 通过指定容器的盒子模型类型,达到不同的展示效果 例如:当一个容器宽度定义为 width:100%;  之后,如果再增加 padding 或者 border 则会溢出父容器,是向外扩张的 如果使用该样式,指定为 box-sizing: border-box; 则 padding 和 border 就不会再溢出,而是向内收缩的,这个效果感觉非常实用, 特别是 input 和 textarea 等 现在设置 100% 再直

【玩转微信公众平台之七】 PHP语法简单介绍

经过多篇的努力,我们终于成为了微信公众平台的开发者.但是别高兴的太早,就跟修真小说一样:修炼多年武破虚空,飞升到仙界后本以为成为了天仙即可跳出三界外,不在五行中.可实际到了仙界才发现,成仙只是修行的第一步......没错,成为开发者也才只是第一步,因为现在你的微信公众平台还没有任何功能,说难听点就是小白,说好听点就是白马王子,说可爱点就是小白白,说黄色点就是洗白白,说...----------------要想在微信公众平台添加功能,那就需要写代码:既然说到写代码,那么肯定是要用php(如果用AS