We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
使用Webpack有一段时间了,但是感觉之前学的用的都比较零散, 所以在这里整理一下Webpack的使用知识,从一开始的入门到进阶。
你知道如何使用webpack打包项目吗? 你知道如何在React中使用模块化的css样式吗?
学完文本文章后,嘿嘿嘿....
webpack 是前端的一个项目构建工具,它是基于 Node.js 开发出来的一个前端工具; 当我们在项目中导入了过多的外部文件是,或造成请求过程慢,错综复杂的依赖关系,以及全局变量污染等问题 那么,如何解决这些问题呢?请使用webpack webpack 这个前端自动化构建工具,可以完美实现资源的合并、打包、压缩、混淆等诸多功能。
npm i webpack -g
npm i webpack --save-dev
npm init
cnpm i jquery --save
main.js
// 导入jquery类库 import $ from 'jquery' // 设置偶数行背景色,索引从0开始,0是偶数 $('#list li:even').css('backgroundColor','lightblue'); // 设置奇数行背景色 $('#list li:odd').css('backgroundColor',function(){ return "#f60" });
import
webpack 入口文件路径 输出文件路径
webpack src/js/main.js dist/bundle.js
** 我们每打包一次就要输入一长串的的指令,那么有没有什么办法可以简单实现打包呢,请往下看 **
webpack.config.js
// 导入处理路径的模块 var path = require('path'); // 导出一个配置对象,将来webpack在启动的时候,会默认来查找webpack.config.js,并读取这个文件中导出的配置对象,来进行打包处理 module.exports = { entry: path.resolve(__dirname, 'src/js/main.js'), // 项目入口文件 output: { // 配置输出选项 path: path.resolve(__dirname, 'dist'), // 配置输出的路径 filename: 'bundle.js' // 配置输出的文件名 } }
** 我们想要解放自己的双手,可不可以我们在 ctrl + s的时候,自动打包呢?**
ctrl + s
webpack-dev-server
cnpm i webpack-dev-server --save-dev
package.json
scripts
"dev": "webpack-dev-server"
bundle.js
http://localhost:8080/
<script src="../bundle.js"></script>
--contentBase src
"dev": "webpack-dev-server --contentBase src"
同时修改index页面中script的src属性为<script src="bundle.js"></script>
<script src="bundle.js"></script>
html-webpack-plugin
由于使用--contentBase指令的过程比较繁琐,需要指定启动的目录,同时还需要修改index.html中script标签的src属性,所以推荐大家使用html-webpack-plugin插件配置启动页面.
--contentBase
html-webpack-plugin的两个作用
使用步骤
cnpm i html-webpack-plugin --save-dev
// 导入处理路径的模块 var path = require('path'); // 导入自动生成HTMl文件的插件 var htmlWebpackPlugin = require('html-webpack-plugin'); module.exports = { entry: path.resolve(__dirname, 'src/js/main.js'), // 项目入口文件 output: { // 配置输出选项 path: path.resolve(__dirname, 'dist'), // 配置输出的路径 filename: 'bundle.js' // 配置输出的文件名 }, plugins:[ // 添加plugins节点配置插件 new htmlWebpackPlugin({ template:path.resolve(__dirname, 'src/index.html'),//模板路径 filename:'index.html'//自动生成的HTML文件的名称 }) ] }
script
注意:热更新在JS中表现的不明显,在CSS身上表现明显!
--open
--port 4321
--hot
"dev": "webpack-dev-server --hot --port 4321 --open"
devServer
devServer: { // 这是配置 dev-server 命令参数的第二种方法,相对来说,这种方法麻烦一些 open: true, // 自动打开浏览器 port: 3000, // 设置启动时候的运行端口 contentBase: 'src', // 指定托管的根目录 hot: true },
webpack
var webpack = require('webpack');
plugins
new webpack.HotModuleReplacementPlugin()
webpack 处理第三方文件类型的过程:
cnpm i style-loader css-loader --save-dev
module: { // 用来配置第三方loader模块的 rules: [ // 文件的匹配规则 { test: /\.css$/, use: ['style-loader', 'css-loader'] }//处理css文件的规则 ] }
use
test
cnpm i less-loader less -D
{ test: /\.less$/, use: ['style-loader', 'css-loader', 'less-loader'] },
cnpm i sass-loader node-sass --save-dev
{ test: /\.scss$/, use: ['style-loader', 'css-loader', 'sass-loader'] }
cnpm i url-loader file-loader --save-dev
{ test: /\.(png|jpg|gif)$/, use: 'url-loader' }
limit
{ test: /\.(png|jpg|gif)$/, use: 'url-loader?limit=43960' },
cnpm i babel-core babel-loader babel-plugin-transform-runtime --save-dev
cnpm i babel-preset-es2015 babel-preset-stage-0 --save-dev
node_modules
{ test: /\.js$/, use: 'babel-loader', exclude: /node_modules/ }
.babelrc
{ "presets":["es2015", "stage-0"], "plugins":["transform-runtime"] }
babel-preset-es2015
babel-preset-env
写在最后,学过vue的同学都知道,我们可以在 <style scoped="scoped"></style> 来设置局部的css样式 那么,在react中如何实现局部的css样式呢?
import indexStyle from 'Index.css'` // 此时 indexStyle 是一个对象, // indexStyle = { // title : '乱码1', box : '乱码2'...... // } export default function App(props) { return ( <div className={indexStyle.box}> <h1 className={indexStyle.title}>XXXXXX</h1> <h3 className={indexStyle.body}>XXXXXX</h3> </div> ) }
注意
/* 注意:当启用 CSS 模块化之后,这里所有的类名,都是私有的, 如果想要把类名设置成全局的一个类,可以把这个类名,用 :global() 给包裹起来 */ /* 当使用 :global() 设置了全局的 类样式之后,这个类不会被重命名 */ /* 只有私有的类才会被重命名 */ :global(.title){ color:red; text-align: center; }
The text was updated successfully, but these errors were encountered:
No branches or pull requests
写在前面
使用Webpack有一段时间了,但是感觉之前学的用的都比较零散,
所以在这里整理一下Webpack的使用知识,从一开始的入门到进阶。
学完文本文章后,嘿嘿嘿....
什么是webpack?
webpack 是前端的一个项目构建工具,它是基于 Node.js 开发出来的一个前端工具;
当我们在项目中导入了过多的外部文件是,或造成请求过程慢,错综复杂的依赖关系,以及全局变量污染等问题
那么,如何解决这些问题呢?请使用webpack
webpack 这个前端自动化构建工具,可以完美实现资源的合并、打包、压缩、混淆等诸多功能。
webpack安装的两种方式
npm i webpack -g
全局安装webpack,这样就能在全局使用webpack的命令npm i webpack --save-dev
将webpack安装到项目依赖中初步使用webpack打包构建列表隔行变色案例
npm init
初始化项目,使用npm管理项目中的依赖包cnpm i jquery --save
安装jquery类库main.js
并书写各行变色的代码逻辑:main.js
会报错,因为浏览器不认识import
这种高级的JS语法,需要使用webpack进行处理,webpack默认会把这种高级的语法转换为低级的浏览器能识别的语法;webpack 入口文件路径 输出文件路径
对main.js
进行处理:使用webpack的配置文件简化打包时候的命令
webpack.config.js
webpack.config.js
中配置这两个路径:webpack.config.js
的配置文件实现webpack的实时打包构建
webpack-dev-server
来实现代码实时打包编译,当修改代码之后,会自动进行打包构建。cnpm i webpack-dev-server --save-dev
安装到开发依赖webpack-dev-server
来进行打包,发现报错,此时需要借助于package.json
文件中的指令,来进行运行
webpack-dev-server
命令,在scripts
节点下新增"dev": "webpack-dev-server"
指令,发现可以进行实时打包,但是dist目录下并没有生成
bundle.js
文件,这是为什么呢?因为webpack-dev-server
将打包好的文件放在了内存中bundle.js
放在内存中的好处是:由于需要实时打包编译,所以放在内存中速度会非常快http://localhost:8080/
网站,发现是一个文件夹的面板,需要点击到src目录下,才能打开我们的index首页,此时引用不到bundle.js文件,需要修改index.html中script的src属性为:
<script src="../bundle.js"></script>
http://localhost:8080/
的时候直接访问到index首页,可以使用--contentBase src
指令来修改dev指令,指定启动的根目录:同时修改index页面中script的src属性为
<script src="bundle.js"></script>
使用
html-webpack-plugin
插件配置启动页面由于使用
--contentBase
指令的过程比较繁琐,需要指定启动的目录,同时还需要修改index.html中script标签的src属性,所以推荐大家使用html-webpack-plugin
插件配置启动页面.cnpm i html-webpack-plugin --save-dev
安装到开发依赖webpack.config.js
配置文件如下:package.json
中script
节点中的dev指令如下:html-webpack-plugin
插件会自动把bundle.js注入到index.html页面中!实现自动打开浏览器、热更新和配置浏览器的默认端口号
注意:热更新在JS中表现的不明显,在CSS身上表现明显!
方式1:
package.json
的script节点如下,其中--open
表示自动打开浏览器,--port 4321
表示打开的端口号为4321,--hot
表示启用浏览器热更新:方式2:
webpack.config.js
文件,新增devServer
节点如下:webpack
模块:plugins
节点下新增:使用webpaack处理css文件和高级js语法
使用webpack打包css文件
cnpm i style-loader css-loader --save-dev
webpack.config.js
这个配置文件:use
表示使用哪些模块来处理test
所匹配到的文件;use
中相关loader模块的调用顺序是从后向前调用的;使用webpack打包less文件
cnpm i less-loader less -D
webpack.config.js
这个配置文件:使用webpack打包sass文件
cnpm i sass-loader node-sass --save-dev
webpack.config.js
中添加处理sass文件的loader模块:使用webpack处理css中的路径
cnpm i url-loader file-loader --save-dev
webpack.config.js
中添加处理url路径的loader模块:limit
指定进行base64编码的图片大小;只有小于指定字节(byte)的图片才会进行base64编码:使用babel处理高级JS语法
cnpm i babel-core babel-loader babel-plugin-transform-runtime --save-dev
安装babel的相关loader包cnpm i babel-preset-es2015 babel-preset-stage-0 --save-dev
安装babel转换的语法webpack.config.js
中添加相关loader模块,其中需要注意的是,一定要把node_modules
文件夹添加到排除项:.babelrc
文件,并修改这个配置文件如下:babel-preset-es2015
可以更新为babel-preset-env
,它包含了所有的ES相关的语法;在React中使用模块化的css
The text was updated successfully, but these errors were encountered: