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 的时候,打包配置项非常透明,可以很容易的 ...
随机推荐
- [转]C# 语言历史版本特性(C# 1.0到C# 8.0汇总)
历史版本 C#作为微软2000年以后.NET平台开发的当家语言,发展至今具有17年的历史,语言本身具有丰富的特性,微软对其更新支持也十分支持.微软将C#提交给标准组织ECMA,C# 5.0目前是ECM ...
- MySQL高级配置
参考文章:http://www.jb51.net/article/47419.htm https://blog.csdn.net/waneto2008/article/details/52502208 ...
- Python--day43--增删改查补充和limit以及order by
增删改查补充: 增: 删和改: 查: 其他: limit:(具有分页的功能) 分页:
- js基础——对象和数组
1.Object类型 1)使用new运算符 var box = new Object();===>等同于 var box = Object();(省略new关键字) box.name ...
- P1086 最大素数积
题目描述 我们称一个整数 \(x\) 是"素数积"当且仅当 \(x = a \times b\) 并且 \(a\) 和 \(b\) 都是素数. 现在告诉你一个数 \(N(1 \le ...
- P1081 弹珠游戏
题目出处 灵灵和他的小伙伴聪聪发掘了一个骨灰级别的游戏--超级弹珠. 游戏的内容是:在一个 n*n 的矩阵里,有若干个敌人,你的弹珠可以摧毁敌人,但只能攻击你所在的行.列里的所有敌人,然后你就可以获得 ...
- antd Bug记录
antd-mobile Carousel 走马灯竖向滚动内容为空会导致visibility:hidden; Carousel Banner轮播组件初始化加载高度不正确可以在第一张图片onload事件的 ...
- CSS3侧栏滑出简单实现
使用css3 的 animation 属性实现的点击滑出侧栏 <!DOCTYPE html> <html lang="en"> <head> & ...
- Linux 内核设备属性
sysfs 中的设备入口可有属性. 相关的结构是: struct device_attribute { struct attribute attr; ssize_t (*show)(struct de ...
- dotnet 通过 WMI 获取系统启动的服务
本文告诉大家如何通过 WMI 获取系统启动的服务 通过 Win32_Service 可以获取系统启动的服务 获取的时候只需要拿Caption和State就可以 var mc = "Win32 ...