手把手教你用webpack3搭建react项目(开发环境和生产环境)(一)
开发环境和生产环境整个配置源码在github上,源码地址:github-webpack-react如果觉得有帮助,点个Star谢谢!!
(一)是开发环境,(二)是生产环境。
一、首先创建package.json并且安装webpack和webpack-dev-server
//不用你书写任何,直接帮你创建一个最简单的package.json文件
npm init -y
//webpack必须,webpack-dev-server开启服务热加载做代理
npm install --save-dev webpack webpack-dev-server 只要下载的是工具类的,需要--save-dev,项目依赖的例如:react这些不需要写--save-dev
接下来开始配置一个完整项目需要配置的各项。先贴出我的项目目录
二、webpack的入口,出口和devserver的配置
var path = require('path');//node提供的一块方法
var webpack = require('webpack');
var HtmlWebpackPlugin = require('html-webpack-plugin');
module.exports = {
entry:'./src/index.jsx', //这是入口文件
output: {
path: path.resolve(__dirname, 'dist'), //打包后文件的输出路径
filename: 'bundle.js', //输出文件名字,开发环境直接把输出名字固定
},
devServer:{
contentBase:'./dist', //指定服务开启的位置,在dist文件夹中
historyApiFallback: true, //不跳转,在开发单页应用时非常有用,它依赖于HTML5 history API,如果设置为true,任意的 404 响应都可能需要被替代为 index.html
inline: true, //实时刷新
port:8000, //默认8080
proxy:{ //代理属性
"/api":{
target:'http://localhost:9000/',
pathRewrite: {"^/api":""}
/* 因为在 ajax 的 url 中加了前缀 '/api',而原本的接口是没有这个前缀的
所以需要通过 pathRewrite 来重写地址,将前缀 '/api' 转为 '' */
}
}
}
}
三、配置js,es6和jsx的编译
//js的loader加载器还有es6转es5,如果react开发需要下载 babel-preset-react
npm install babel-core babel-loader babel-preset-env babel-preset-react --save-dev
//babel相关插件配置
npm install --save-dev babel-plugin-transform-runtime babel-preset-stage-0
配置如下:
{
test: /\.(js|jsx)$/, //匹配所有的js和jsx
exclude:/node_modules/, //除了这个文件夹外
use: {
loader: "babel-loader" //babel的相关配置在.babelrc文件里
}
}
.babelrc文件的配置如下
{
"presets": [
"env",
"react",
"stage-0"
],
"plugins": ["transform-runtime"]
}
想要跟深入了解babel的配置的可以查看此文章对英文版的翻译连接地址:https://excaliburhan.com/post/babel-preset-and-plugins.html
四、配置css,sass,postcss和autoprefixer
//css的loader转换器和style的loader转换器
npm install --save-dev css-loader style-loader
//因为sass-loader依赖于node-sass,所以还要安装node-sass,postcss-loader autoprefixer postcss 添加浏览器兼容
npm install --save-dev sass-loader node-sass postcss-loader autoprefixer postcss
配置如下所示
//配置css
{
test: /\.css$/,
use: [
'style-loader',
{loader: 'css-loader',,options: {importLoaders: 1}},
{loader: 'postcss-loader',options:{ident:"postcss",plugins:[require("autoprefixer")("last 100 versions")]}}
]
},
//配置scss 执行顺序是从右往走的这个顺序是不能改变的
{
test: /\.scss$/,
use: [
'style-loader',
{loader: 'css-loader',options: {importLoaders: 2}}, //css-loader后还需要2个loader
{loader: 'postcss-loader',options:{ident:"postcss",plugins:[require("autoprefixer")("last 100 versions")]}},
'sass-loader'
]
}
关于postcss的配置详情可以查看我的另一篇博客:webpack3中使用postcss-loader和autoprefixer给css3样式添加浏览器兼容
五、配置图片和字体图标
npm install --save-dev url-loader
url-loader主要为了解决图片过多,http请求增加导致性能降低,他主要的原理是将引入的图片编码,生成dataURl。相当于把图片数据翻译成一串字符。再把这串字符打包到文件中,最终只需要引入这个文件就能访问图片了,官网描述url-loader封装了file-loader(这个loader主要用户把一个文件不任何处理知识转移位置用),这就体现了url-loader的limit的参数的作用,具体工作步骤是1.文件大小小于limit参数,url-loader将会把文件转为DataURL;2.文件大小大于limit,url-loader会调用file-loader进行处理,参数也会直接传给file-loader。因此我们只需要安装url-loader即可。
配置如下
//配置图片
{
test:/\.(jpg|png|gif|jpeg|bmp)$/,
use:{
loader:'url-loader',
options: {
limit: 8192 //限制图片的大小
}
}
},
//配置字体图标
{
test:/\.(woff|woff2|svg|ttf|eot)$/,
use:{
loader:'url-loader',
options: {
limit: 10000, //开发环境下这里足够大就可以,直接把字体图标打包到文件里,开发环境就需要单独打包了下一节会讲
}
}
},
想了解具体的可以看我写的另一篇文章:webpack3配置字体图标和打包相关问题
六、最后一步使用插件html-webpack-plugin
npm install --save-dev html-webpack-plugin
这个插件的作用就是用来生成html的,并且会自动帮你把打包后的静态文件引入的html中。
配置如下
//会以我项目里里的inde.template.html为模板,会在dist路径下生成index.html并引用所有的静态资源。项目输出路径为dist。
new HtmlWebpackPlugin({
template: __dirname + '/src/index.template.html'
})
通过上边的步骤开发环境下的配置已经配置好了我在package.json文件中添加了如下:
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"start": "webpack-dev-server --hot --colors --inline --open", //直接执行npm start 项目就开启了,默认打开的是webpack.config.js
"build": "rimraf dist && webpack --config webpack.dev.js" //npm run build 打包项目先删除dist文件夹,然后在运行webpack.dev.js
}
现在直接npm start 项目就开启了
开发环境和生产环境整个配置源码在github上,源码地址:github-webpack-react 如果觉得有帮助,点个Star谢谢!!
相关文章:
手把手教你用webpack3搭建react项目(开发环境和生产环境)(二)
webpack3中使用postcss-loader和autoprefixer给css3样式添加浏览器兼容
webpack3配置字体图标和打包相关问题
webpack中hash与chunkhash区别和需要注意的问题
手把手教你用webpack3搭建react项目(开发环境和生产环境)(一)的更多相关文章
- 手把手教你用vue-cli搭建vue项目
手把手教你用vue-cli搭建vue项目 本篇主要是利用vue-cli来搭建vue项目,其中前提是node和npm已经安装好,文章结尾将会简单提到一个简单的例子.使用vue-cli搭建项目最开始我也是 ...
- SpringCloud学习之手把手教你用IDEA搭建入门项目(三)
本篇博客是承接上一篇<手把手教你用IDEA搭建SpringCloud入门项目(二)>,不清楚的请到我的博客空间查看后再看本篇博客,上面两篇博客成功创建了一个简单的SpringCloud项目 ...
- SpringCloud学习之手把手教你用IDEA搭建入门项目(二)
本篇博客是承接上一篇<手把手教你用IDEA搭建SpringCloud入门项目(一)>,不清楚的请到我的博客空间查看后再看本篇博客 1)先创建一个Eureka服务注册中心模块,用来作为服务的 ...
- SpringCloud学习之手把手教你用IDEA搭建入门项目(一)
SpringCloud简单搭建 jdk:1.8开发工具:IDEA注:需要了解springcloud 1.创建最简单的Maven项目 1)开始创建一个新的项目 2)创建一个空模板的maven项目,用 ...
- SpringCloud学习之手把手教你用IDEA搭建入门项目【番外篇】(一)
之前的文章里,我曾经搭建了一个Springcloud项目,但是那个时候我对于SpringCloud架构的很多组件不甚清楚,只是通过查找资料然后动手稀里糊涂的把一个项目成功搭建起来了,其中有很多不合理和 ...
- 手把手教你用vue-clic3搭建vue-element-admin项目
下载element-admin框架 点击该地址:https://github.com/PanJiaChen/vue-element-admin 用git clone https://github.co ...
- 手把手教你 在IDEA搭建 SparkSQL的开发环境
1. 创建maven项目 在IDEA中添加scala插件 并添加scala的sdk https://www.cnblogs.com/bajiaotai/p/15381309.html 2. 相关依赖j ...
- react项目开发中遇到的问题
前言 作为一个前端爱好者来说,都想在react上一试生手,那么在搭建react项目开发时,肯定会有这样或者那样的问题,尤其是对初学者来说,下面就个人在开发过程中遇到的问题总结一下,好在有google帮 ...
- 手把手教你认识并搭建Nginx
手把手教你认识并搭建Nginx Nginx (“engine x”) 是一个高性能的 HTTP 和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器. Nginx 是由 Igor ...
随机推荐
- 2n皇后问题
此题为蓝桥杯基础练习题. 问题描述 给定一个n*n的棋盘,棋盘中有一些位置不能放皇后.现在要向棋盘中放入n个黑皇后和n个白皇后,使任意的两个黑皇后都不在同一行.同一列或同一条对角线上,任意的两个白皇后 ...
- shell编程之BASH变量(2)
变量命名规范 在bash中,变量的默认类型都是字符串型,定义 name = 'kk' 变量分类 用户自定义变量.变量自定义的 环境变量:这种变量中主要保存的是和系统操作环境相关的数据.变量可以自定义, ...
- 【技术干货】git常用命令
2.1 git init语法: git init在当前目录初始化git仓库,适用于尚未使用git管理的项目2.2 git clone语法: git clone <url>例如: git c ...
- hql语句中的select字句和from 字句
package com.imooc.model; import java.util.List; import java.util.Map; import org.hibernate.Query; im ...
- Android 如何进行页面传递对象
当我们从一个页面调到另一个页面的时候,需要把该页面的一些设定值也传递给下一个页面.当要传递的值很多时,我们可以传递一个对象. 页面1: Intent intent = new Intent(PageO ...
- LINUX signal 信号
body, table{font-family: 微软雅黑; font-size: 10pt} table{border-collapse: collapse; border: solid gray; ...
- 在 React 中使用 JSX 的好处
优点: 1.允许使用熟悉的语法来定义 HTML 元素树: 2.提供更加语义化且移动的标签: 3.程序结构更容易被直观化: 4.抽象了 React Element 的创建过程: 5.可以随时掌控 HTM ...
- linux redis基础应用 主从服务器配置
Redis基础应用 redis是一个开源的可基于内存可持久化的日志型,key-value数据库redis的存储分为内存存储,磁盘存储和log文件三部分配置文件中有三个参数对其进行配置 优势:和memc ...
- 【前端】Vue和Vux开发WebApp日志一、整合vue+cordova和webpack+gulp
转载请注明出处:http://www.cnblogs.com/shamoyuu/p/vue_vux.html 项目github地址:https://github.com/shamoyuu/vue-vu ...
- 单片机:STC89C52的最小单元
STC89C52RC是STC公司生产的一种低功耗.高性能CMOS8位微控制器,具有 8K字节系统可编程Flash存储器.STC89C52使用经典的MCS-51内核,但做了很多的改进使得芯片具有传统51 ...