webpack 三
之前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 三的更多相关文章
- webpack(三)使用 babel-loader 转换 ES6代码
查询各个 loader的使用,可以在官网上查询. https://www.npmjs.com (一)安装 babel-loader,babel-core. 使用命令 npm install --s ...
- webpack三种代码
在使用webpack时,主要有三种代码类型: 1.你或你的团队写的源码 2.第三方library或vendor代码 3.管理模块交互的runtime和manifest 什么是manifest文件? 通 ...
- vue-cli webpack 快速搭建项目
一.安装vue npm install vue -g 二.用vue-cli快速搭建项目 //全局安装vue-cli npm install install -g vue-cli //创建一个基于web ...
- 公共组件及脚手架webpack模板
一.公共组件的创建和使用 前面已经学习vue组件时,了解了公共组件,但在脚手架项目中只使用过局部组件.这里是讲解全局组件如何在脚手架项目中去使用. 1.创建全局组件 在src/components/C ...
- webpack介绍和使用
一webpack介绍1由来2介绍3作用4拓展说明5webpack整体认知二webpack安装1安装node2安装cnpm3安装nrm的两种方法4安装webpack三webpack配置0搭建项目结构1初 ...
- 10. vue之webpack打包详解
一.什么是webpack webpack官网给出的定义是 本质上,webpack 是一个现代 JavaScript 应用程序的静态模块打包器(module bundler).当 webpack 处理应 ...
- 3-WebPack
一. 什么是WebPack WebPack可以看做是模块加载.打包工具. 它所做的事情是 1.分析你的项目结构,找到JavaScript模块以及其它的一些浏览器不能直接运行的拓展语言(Scss,Typ ...
- omi-cli新版发布-升级webpack2和支持sass生成组件局部CSS
写在前面 omi-cli是Omi的命令行工具.在v0.1.X以及之前版本中,生成出来的项目脚手架 是基于webpack1的.由于: webpack1不支持tree-shaking,webpack2 支 ...
- vue-cli 3.x 开发插件并发布到 npm
为了摆脱咸鱼的身份,我给自己定了一个开源项目的目标 于是抽空写了一个 textarea,打算发布到 npm 的时候却遇到了问题 之前用 vue-cli 2.x 的时候,打包配置项非常透明,可以很容易的 ...
随机推荐
- dell装系统
Dell f2进入bios USB support改为enable Uefi 改为legacy F12可看到USB
- thinkPHP框架中执行原生SQL语句的方法
这篇文章主要介绍了thinkPHP框架中执行原生SQL语句的方法,结合实例形式分析了thinkPHP中执行原生SQL语句的相关操作技巧,并简单分析了query与execute方法的使用区别,需要的朋友 ...
- 陈志生:德国信贷工厂风控模式对P2P的启发
上海合盘金融信息服务股份有限公司董事长陈志生 和讯银行消息 "2014中国金融论坛"于5月14-15日在北京召开,本次论坛主题为“全面深化金融体制改革与实体经济增长”.和讯网作为指 ...
- 【u201】矩形覆盖
Time Limit: 1 second Memory Limit: 128 MB [问题描述] 有N个矩形,矩形的底边边长为1,且均在X轴上,高度给出,第i个矩形的高为h[i],例如h = [3, ...
- js操作改变原数组的解决方法
最近在开发的时候发现js中的循环操作会改变原数组,var一个变量承接也不行 甚至连map方法都会改变原数组,下面是解决方法 let a = ['a','b','c'] let b = [[2, 0, ...
- ZR1158
ZR1158 http://www.zhengruioi.com/contest/446/problem/1158 给定限制的问题大多数都是容斥或者二分,或者二分之后容斥 首先,这个问题的第一步我们还 ...
- Postman:非专业的并发测试
Postman是开发中常用的接口测试工具,也可以用来进行并发测试. 使用方法如下: 1. 直接输入url 选择GET方法,点击Send. 结果打印一个"test",如下: 2. 使 ...
- C语言 屏幕截图 (GDI)
截取全屏幕 #include <windows.h> void echo(CHAR *str); int CaptureImage(HWND hWnd, CHAR *dirPath, ...
- 运用NodeJs环境并依赖第三方库,框架等实现网站前后端分离报错问题及处理方法
运用NodeJs环境并依赖第三方库,框架等实现网站前后端分离报错问题及处理方法 问题一: SyntaxError: missing ) after argument list in .....\vie ...
- linux_jdk,zookeeper,kafka安装
若是在虚拟机安装最好先进行下面的安装 1.1修改各个虚拟机主机名 vi /etc/sysconfig/network 1.2修改主机名和IP的映射关系 vi /etc/hosts 1.3关闭防火墙 # ...