之前06年写了两篇自己研究webpack的文章,由于webpack已经升到了4.x,今天用起来发现有点小变化,重新自己建一个简单的项目,这里记录一下过程

1、安装webpack和webpack-cli

 以前安装webpack就行了,现在还需要安装webpack-cli,不然会报错。 安装方法一样  cnpm i -g webpack  和 cnpm i -g webpack-cli  这里采用全局安装。

2、手动创建文件夹 webpack.config.js 文件,首先根据官网来以最简单的打包方式,这个文件里必须有entry、output和mode。

const path = require('path');
module.exports = {
entry: './a.js', //入口文件地址
output: {
path: path.resolve(__dirname, 'dist'), //现在这里必须是绝对路径
filename: 'my-first-webpack.bundle.js' //输出文件的名字
},
mode: 'development' //如果不在这里指定development 或 production会报错
};

这里注意,如果不指定mode会给警告,并且没有把需要打包的内容打包进去。

当然不在这里写也可以在打包的时候指定 webpack --mode developent 来指定

这里不得不说,官网的文档真是不好找,找了好久才找到,这里记录一下,相关的命令比如说常用的--progress,--config,--watch,--display-module,--colors等命令,在api =>命令行接口里找。

还有需要说明的一点是,输入路径output里的path必须是绝对路径,相对路径会报错。

3、写完上面的,输入webpack,确实可以打包了,把a.js打包到了dist里面的my-first-webpack.bundle.js中,但这样很简单,不太适合实际的应用场景,实际中可能是多个入口文件,打包成多个文件来适应不同的场景,这里有两个点,第一个是入口文件可以支持对象的方式用来打包

  entry: {
one:'./a.js',
two:'./b.js'
}

第二个是如果入口文件是多个文件,那输出也必须是多个,那么就要用到占位符

最后我代码改成了这样

const path = require('path');
module.exports = {
entry: {
one:'./a.js',
two:'./b.js'
},
output: {
path: path.resolve(__dirname, './dist'),
filename: '[name].js'
},
mode: 'development',
};

4、操作完了上面的,确实是可以打包出来,但还是有点不太符合实际场景,就是如果我写一个html文件,引用了一个script(路径是写死的),那么如果是多个并且是自动生成的我要如何写。于是用了webpack里面的插件,其中有一个插件是html-webpack-plugin。

先安装  cnpm i html-webpack-plugin -D 我这里没有全局安装。

安装后,在webpack.config.js中引用,并且添加到plugins中,通过使用new操作创建一个实例

const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
module.exports = {
entry: {
one:'./a.js',
two:'./b.js'
},
output: {
path: path.resolve(__dirname, './'),
filename: './dist/[name].js'
},
mode: 'development',
plugins: [
new HtmlWebpackPlugin({template: 'index.html'})
]
};

这里我对output输出路径也做了一点小修改,使输出的html和生成的js不在同一个文件夹内。基本上到这就差不多了。

相关的插件可以看官网  https://www.webpackjs.com/plugins/

至于filename(可以是‘'index-[hash].html'’)、inject(规定了放在什么地方)、title、minify(设置生成后的文件如去空格去注释等)等配置在哪。

相关配置看:https://github.com/jantimon/html-webpack-plugin#minification  minifier: https://github.com/kangax/html-minifier

这里需要说的是htmlwebpackplugin是支持模板语言的,在html中可以用ejs语法来写 <%= htmlWebpackPlugin.options.title%> 可以取到里面title设置的值。

如果想多生成html,就再调用一次,通过truncks:[]来引入想引入的文件

5、webpack除了entry、output、plugins还有一个重要的就是loader,他告诉webpack在除了处理js以外如何处理其他文件,比如说图片,音频,视频,css,less等。

现在的版本已经改成了这样用,需要处理哪些格式的文件

  module: {
rules: [
{ test: /\.txt$/, use: 'raw-loader' }
]
}

test 属性,是一个正则表达式,用于解析什么文件。
use 属性,表示进行转换时,应该使用哪个 loader。

使用之前先安装相应的loader

有哪些loader可以安装,如何安装和如何引用可以看官网  https://www.webpackjs.com/loaders/

对于rules进行相应的配置 ,见文档  https://www.webpackjs.com/configuration/module/#rule

其中比较重要和常用的:

一、其中Rule.options 和 Rule.query已经被废弃了,现在写在use里

use: [
'style-loader',
{
loader: 'css-loader',
options: {
importLoaders: 1
}
},
{
loader: 'less-loader',
options: {
noIeCompat: true
}
}
]

二、include和exclude,用来指定哪些用来打包,可以大大压缩打包时间。

就暂时这些。

webpack 三的更多相关文章

  1. webpack(三)使用 babel-loader 转换 ES6代码

    查询各个 loader的使用,可以在官网上查询. https://www.npmjs.com (一)安装 babel-loader,babel-core.   使用命令 npm install --s ...

  2. webpack三种代码

    在使用webpack时,主要有三种代码类型: 1.你或你的团队写的源码 2.第三方library或vendor代码 3.管理模块交互的runtime和manifest 什么是manifest文件? 通 ...

  3. vue-cli webpack 快速搭建项目

    一.安装vue npm install vue -g 二.用vue-cli快速搭建项目 //全局安装vue-cli npm install install -g vue-cli //创建一个基于web ...

  4. 公共组件及脚手架webpack模板

    一.公共组件的创建和使用 前面已经学习vue组件时,了解了公共组件,但在脚手架项目中只使用过局部组件.这里是讲解全局组件如何在脚手架项目中去使用. 1.创建全局组件 在src/components/C ...

  5. webpack介绍和使用

    一webpack介绍1由来2介绍3作用4拓展说明5webpack整体认知二webpack安装1安装node2安装cnpm3安装nrm的两种方法4安装webpack三webpack配置0搭建项目结构1初 ...

  6. 10. vue之webpack打包详解

    一.什么是webpack webpack官网给出的定义是 本质上,webpack 是一个现代 JavaScript 应用程序的静态模块打包器(module bundler).当 webpack 处理应 ...

  7. 3-WebPack

    一. 什么是WebPack WebPack可以看做是模块加载.打包工具. 它所做的事情是 1.分析你的项目结构,找到JavaScript模块以及其它的一些浏览器不能直接运行的拓展语言(Scss,Typ ...

  8. omi-cli新版发布-升级webpack2和支持sass生成组件局部CSS

    写在前面 omi-cli是Omi的命令行工具.在v0.1.X以及之前版本中,生成出来的项目脚手架 是基于webpack1的.由于: webpack1不支持tree-shaking,webpack2 支 ...

  9. vue-cli 3.x 开发插件并发布到 npm

    为了摆脱咸鱼的身份,我给自己定了一个开源项目的目标 于是抽空写了一个 textarea,打算发布到 npm 的时候却遇到了问题 之前用 vue-cli 2.x 的时候,打包配置项非常透明,可以很容易的 ...

随机推荐

  1. dell装系统

    Dell f2进入bios USB support改为enable Uefi 改为legacy F12可看到USB

  2. thinkPHP框架中执行原生SQL语句的方法

    这篇文章主要介绍了thinkPHP框架中执行原生SQL语句的方法,结合实例形式分析了thinkPHP中执行原生SQL语句的相关操作技巧,并简单分析了query与execute方法的使用区别,需要的朋友 ...

  3. 陈志生:德国信贷工厂风控模式对P2P的启发

    上海合盘金融信息服务股份有限公司董事长陈志生 和讯银行消息 "2014中国金融论坛"于5月14-15日在北京召开,本次论坛主题为“全面深化金融体制改革与实体经济增长”.和讯网作为指 ...

  4. 【u201】矩形覆盖

    Time Limit: 1 second Memory Limit: 128 MB [问题描述] 有N个矩形,矩形的底边边长为1,且均在X轴上,高度给出,第i个矩形的高为h[i],例如h = [3, ...

  5. js操作改变原数组的解决方法

    最近在开发的时候发现js中的循环操作会改变原数组,var一个变量承接也不行 甚至连map方法都会改变原数组,下面是解决方法 let a = ['a','b','c'] let b = [[2, 0, ...

  6. ZR1158

    ZR1158 http://www.zhengruioi.com/contest/446/problem/1158 给定限制的问题大多数都是容斥或者二分,或者二分之后容斥 首先,这个问题的第一步我们还 ...

  7. Postman:非专业的并发测试

    Postman是开发中常用的接口测试工具,也可以用来进行并发测试. 使用方法如下: 1. 直接输入url 选择GET方法,点击Send. 结果打印一个"test",如下: 2. 使 ...

  8. C语言 屏幕截图 (GDI)

    截取全屏幕 #include <windows.h>   void echo(CHAR *str); int CaptureImage(HWND hWnd, CHAR *dirPath, ...

  9. 运用NodeJs环境并依赖第三方库,框架等实现网站前后端分离报错问题及处理方法

    运用NodeJs环境并依赖第三方库,框架等实现网站前后端分离报错问题及处理方法 问题一: SyntaxError: missing ) after argument list in .....\vie ...

  10. linux_jdk,zookeeper,kafka安装

    若是在虚拟机安装最好先进行下面的安装 1.1修改各个虚拟机主机名 vi /etc/sysconfig/network 1.2修改主机名和IP的映射关系 vi /etc/hosts 1.3关闭防火墙 # ...