webpack3最新版本配置研究(一)loader
2017-10-12 19:44
633 查看
webpack这货还是挺火的,目前前端不管是react和vue都用这个打包,还是挺好用的,本文刚开始写的是webpack2,但后来发现webpack3可以无伤升级就升级了下,据说webpack3相对于2的生成的代码运行速度更快!在家里装了个最新版本的nodejs8.4.0,附带的npm是5.3.0的,有的时候install的时候会爆Cannot read property ‘0’ of undefined,目前的办法是npm install -g npm@5.2.0退级,或者安装nodejs6的稳定版,之后可能会处理这个bug
WebPack可以看做是模块打包机:它做的事情是,分析你的项目结构,找到JavaScript模块以及其它的一些浏览器不能直接运行的拓展语言(Scss,TypeScript等),并将其打包为合适的格式以供浏览器使用。
其实Webpack和另外两个并没有太多的可比性,Gulp/Grunt是一种能够优化前端的开发流程的工具,而WebPack是一种模块化的解决方案,不过Webpack的优点使得Webpack可以替代Gulp/Grunt类的工具。
webpack的安装和其他的npm包类似
2
3
4
5
6
首先是最简单的webpack打包
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
然后在当前文件夹使用命令行输入npm run webpack 就可以将index的文件和他的require全都打到bundle中了,首先先执行了npm中的script调用了webpack命令,webpack命令直接执行了webpack.config.js中的配置,将index.js打包到bundle文件里引入
Loader
webpack通过调用外部的脚本可以对各种文件进行处理,把下一代的ES6,ES7转换为ES5。或者说对React的开发而言,可以把React的JSX文件转换为JS文件。也可以将css打包到js中,例如style和css的loader,在webpack1中loader在module中是用loaders字段的,在webpack2中使用的是rules字段
babel
babel是loader中比较重要的,用来将es6和es7转换成es5来进行浏览器的展示,用下列命令安装它们
npm install –save-dev babel-core babel-loader babel-preset-es2015 babel-preset-react
2
3
4
5
6
7
8
9
10
11
12
13
这时再运行下npm run webpack之后,发现之前index和div中的const写法被转换成es5的var了
cssloader
用来解析js中引入的css和sass,老规矩
npm install –save-dev style-loader css-loader
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
执行npm run webpack之后打开index.html是不是字体变红了呢?
url-loader
现在来我们来试试加载图片,第一件事情肯定是安装对应的loader,可以将小图片转换成base64,减少请求
npm install url-loader file-loader –save-dev
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
新建一个img文件夹,在里面放置一个小于8k的图片1.png,一个大于8k的图片avatar.jpg,修改好之后输入npm run webpack,可以看到小于8k的图片被转换成了base64,而大的图则通过file-loader直接引入了图片,并加上了hash的值
sass-loader
先安装下相关的依赖 npm install –save-dev sass-loader node-sass //需要两个一起装,单装一个node-sass好像会报错
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
继续npm run webpack,可以发现scss文件被打包打进去了,宽高40px替换掉了之前的10px
less-loader
npm install less less-loader –save-dev
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
json-loader
npm install json-loader –save-dev
2
3
4
5
6
postcss
postcss感觉弄起来还是有点复杂的
npm install postcss-loader autoprefixer –save-dev
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
用webpack打包之后生成的头部自动打上了一些兼容的css,是不是很方便呢?
webpack.config.js汇总
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
获取更多webpack-loader
什么是Webpack
WebPack可以看做是模块打包机:它做的事情是,分析你的项目结构,找到JavaScript模块以及其它的一些浏览器不能直接运行的拓展语言(Scss,TypeScript等),并将其打包为合适的格式以供浏览器使用。
WebPack和Grunt以及Gulp相比有什么特性
其实Webpack和另外两个并没有太多的可比性,Gulp/Grunt是一种能够优化前端的开发流程的工具,而WebPack是一种模块化的解决方案,不过Webpack的优点使得Webpack可以替代Gulp/Grunt类的工具。webpack的安装和其他的npm包类似
npm init //一路回车,这里要注意name最好不要取什么webpack,grunt,glup之类的,不然可能会爆refusing to install xxxx as a dependency of itself //全局安装 npm install -g webpack //安装到你的项目目录,最好制定一个版本号 npm install --save-dev webpack@3.4.01
2
3
4
5
6
首先是最简单的webpack打包
//index.html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>index</title> </head> <body> <div id="parent"> </div> </body> <script src="bundle.js"></script> </html> //index.js const divItem = require('./div'); document.getElementById('parent').appendChild(divItem()); //div.js module.exports = () => { const divDom = do 4000 cument.createElement('div'); divDom.textContent = 'write something'; return divDom; } //webpack.config.js module.exports = { // 打包文件的存放地址 entry: __dirname + "/index.js", output:{ // 打包后存放地址 path: __dirname, // 输出后的文件名 filename: 'bundle.js' } } //package.json中将scripts修改,npm run webpack命令会调用webpack命令行 "scripts": { "webpack":"webpack" }1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
然后在当前文件夹使用命令行输入npm run webpack 就可以将index的文件和他的require全都打到bundle中了,首先先执行了npm中的script调用了webpack命令,webpack命令直接执行了webpack.config.js中的配置,将index.js打包到bundle文件里引入
Loader
webpack通过调用外部的脚本可以对各种文件进行处理,把下一代的ES6,ES7转换为ES5。或者说对React的开发而言,可以把React的JSX文件转换为JS文件。也可以将css打包到js中,例如style和css的loader,在webpack1中loader在module中是用loaders字段的,在webpack2中使用的是rules字段
babel
babel是loader中比较重要的,用来将es6和es7转换成es5来进行浏览器的展示,用下列命令安装它们
npm install –save-dev babel-core babel-loader babel-preset-es2015 babel-preset-react
module: { rules: [ { test: /\.js|jsx$/, //是一个正则,代表js或者jsx后缀的文件要使用下面的loader loader: "babel-loader" } ] } //创建一个.babelrc,webpack中的babel会自动调用该文件的配置到babel中转换js { "presets": ["react", "es2015"] }1
2
3
4
5
6
7
8
9
10
11
12
13
这时再运行下npm run webpack之后,发现之前index和div中的const写法被转换成es5的var了
cssloader
用来解析js中引入的css和sass,老规矩
npm install –save-dev style-loader css-loader
//webpack.config.js中修改module module: { rules: [ { test: /\.js|jsx$/, //是一个正则,代表js或者jsx后缀的文件要使用下面的loader loader: "babel-loader" }, { test: /\.css$/, loader: "style-loader!css-loader"//添加对样式表的处理 } ] } //生成一个index.css文件来添加一些样式 #parent{ color: red; } //index.js中添加样式 require('./index.css');1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
执行npm run webpack之后打开index.html是不是字体变红了呢?
接上面的loader
url-loader 现在来我们来试试加载图片,第一件事情肯定是安装对应的loader,可以将小图片转换成base64,减少请求
npm install url-loader file-loader –save-dev
//修改index.html加两个div,背景图片设置成两张图片,一个小的,一个大的 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>index</title> </head> <body> <div id="parent"> <div id="a"></div> <div id="b"></div> </div> </body> <script src="bundle.js"></script> </html> //index.css增加 #parent{ color: red; } #a{ background-image: url(img/1.png); height:10px; width:10px; } #b{ background-image: url(img/avatar.jpg) ; background-size:100% 100%; height:50px; width:50px; } //增加webpack.config.js中的loader module: { rules: [ { test: /\.js|jsx$/, //是一个正则,代表js或者jsx后缀的文件要使用下面的loader loader: "babel-loader" }, { test: /\.css$/, loader: "style-loader!css-loader"//添加对样式表的处理 }, { test: /\.(png|jpe?g|gif|svg)(\?.*)?$/, loader: "url-loader?limit=8192&name=build/img/[name].[hash:8].[ext]" } ] }1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
新建一个img文件夹,在里面放置一个小于8k的图片1.png,一个大于8k的图片avatar.jpg,修改好之后输入npm run webpack,可以看到小于8k的图片被转换成了base64,而大的图则通过file-loader直接引入了图片,并加上了hash的值
sass-loader
先安装下相关的依赖 npm install –save-dev sass-loader node-sass //需要两个一起装,单装一个node-sass好像会报错
//新建一个scss文件夹新建一个index.scss文件,注意是scss,scss,scss $length: 50px; #a{ width: $length; height: $length; } //index.js中增加scss的引用 require('./scss/index.scss'); webpack.config.js module: { rules: [ { test: /\.js|jsx$/, //是一个正则,代表js或者jsx后缀的文件要使用下面的loader loader: "babel-loader" }, { test: /\.scss$/, loader: 'style-loader!css-loader!sass-loader' }, { test: /\.css$/, loader: "style-loader!css-loader"//添加对样式表的处理 }, { test: /\.(png|jpe?g|gif|svg)(\?.*)?$/, loader: "url-loader?limit=8192&name=build/img/[name].[hash:8].[ext]" } ], }1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
继续npm run webpack,可以发现scss文件被打包打进去了,宽高40px替换掉了之前的10px
less-loader
npm install less less-loader –save-dev
//新建一个less文件夹新建一个index.less文件 @borderlength: 2px; #b{ border: @borderlength solid red; } //index.js中引入less文件 require('./less/index.less'); //webpack.cofig module: { rules: [ { test: /\.js|jsx$/, //是一个正则,代表js或者jsx后缀的文件要使用下面的loader loader: "babel-loader" }, { test: /\.scss$/, loader: 'style-loader!css-loader!sass-loader' }, { test: /\.less$/, loader: 'style-loader!css-loader!less-loader' }, { test: /\.css$/, loader: "style-loader!css-loader"//添加对样式表的处理 }, { test: /\.(png|jpe?g|gif|svg)(\?.*)?$/, loader: "url-loader?limit=8192&name=build/img/[name].[hash:8].[ext]" } ], }1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
json-loader
npm install json-loader –save-dev
// webpack.config.js中增加 module: { rules: [ {test: /\.json$/,loader: 'json'}, ] }1
2
3
4
5
6
postcss
postcss感觉弄起来还是有点复杂的
npm install postcss-loader autoprefixer –save-dev
//新建一个postcss。config.js的配置文件 module.exports = { plugins: [ require('autoprefixer') ] } //修改webpack.config.js中需要使用postcss的css文件中的loader,以scss为例 //头部因如下 const autoprefixer = require('autoprefixer'); //修改module { test: /\.scss$/, // loader: 'style-loader!css-loader!sass-loader!postcss-loader' use: [ { loader: 'style-loader'}, { loader: 'css-loader'}, { loader: 'postcss-loader', options: { plugins: () => [autoprefixer( { browsers: ['iOS >= 7', 'Android >= 4.1', 'last 10 Chrome versions', 'last 10 Firefox versions', 'Safari >= 6', 'ie > 8'] } )], }, }, 'sass-loader' ] } //index.scss中随便加点需要兼容的css样式 $radius: 10px; #b{ display:flex; border-radius: $radius; transform: scale(0.8); }1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
用webpack打包之后生成的头部自动打上了一些兼容的css,是不是很方便呢?
webpack.config.js汇总
const autoprefixer = require('autoprefixer'); module.exports = { entry: __dirname + "/index.js", output:{ path: __dirname, filename: 'bundle.js' }, module: { rules: [ { test: /\.js|jsx$/, //是一个正则,代表js或者jsx后缀的文件要使用下面的loader loader: "babel-loader" }, { test: /\.scss$/, // loader: 'style-loader!css-loader!sass-loader!postcss-loader' use: [ { loader: 'style-loader'}, { loader: 'css-loader'}, { loader: 'postcss-loader', options: { plugins: () => [autoprefixer( { browsers: ['iOS >= 7', 'Android >= 4.1', 'last 10 Chrome versions', 'last 10 Firefox versions', 'Safari >= 6', 'ie > 8'] } )], }, }, 'sass-loader' ] }, { test: /\.less$/, loader: 'style-loader!css-loader!less-loader' }, { test: /\.css$/, loader: 'style-loader!css-loader' }, { test: /\.(png|jpe?g|gif|svg)(\?.*)?$/, loader: "url-loader?limit=8192&name=build/img/[name].[hash:8].[ext]" } ], } }1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
获取更多webpack-loader
相关文章推荐
- webpack3最新版本配置研究(二)loader
- webpack3最新版本配置研究(二)loader
- webpack3最新版本配置研究(三)多入口,html-webpack-plugin, extract-text-webpack-plugin
- webpack3最新版本配置研究(五) devtool,webpack-dev-server,CommonsChunkPlugin
- webpack3最新版本配置研究(三)webpack压缩,clean-webpack-plugin,webpack-manifest-plugin,define-plugin
- webpack3最新版本配置研究(四)webpack压缩,clean-webpack-plugin,webpack-manifest-plugin,define-plugin
- webpack3最新版本配置研究(四) devtool,webpack-dev-server,CommonsChunkPlugin
- webpack3最新版本配置研究(一)loader
- webpack3.0之loader配置及编写(一)
- VUE开发请求本地数据的配置,旧版本dev-server.js,新版本webpack.dev.conf.js
- 手把手教你webpack3(10)Less-Loader配置简述
- webpack loader配置
- WebPack安装-使用-Loader-配置-插件-环境-排错详解(下)
- 手把手教你webpack3(11)PostCSS-Loader配置简述
- webpack---webpack.config.js配置基本要素entry、output、loader、plugins等
- webpack2.0配置postcss-loader的方法
- webpack配置热加载之react-hot-loader和webpack-dev-server的使用
- webpack3.0之loader配置及编写(一)
- webpack配置开发环境(html-webpack-plugin、css-loader、less-loader、babel-loader)
- Vue + Webpack + Vue-loader 系列教程(2)相关配置篇