webpack打包react项目的实现方法


Posted in Javascript onJune 21, 2018

1webpack简介

webpack是目前最流行的打包工具之一,是一个为前端模块打包构建而生的工具,它既吸取了大量已有的方案优点和教训,也解决了很多前端开发过程中已有的痛点,如代码的拆分与异步加载,对非js资源的支持,强大的loader设计使得它更像是一个构建平台,而不是打包工具。

2webpack,react开发环境

1)新建一个项目文件夹,进入此文件夹,创建package.json文件(npm init命令)

2)确认已安装webpack,web pack-dev-server模块

3)安装babel(babel不懂的请先看https://3water.com/article/142362.htm)babel的目的有两个(将es6转为es5,转换jsx语法),

4) 安装babel-preset-es2015和babel-preset-react

5)安装babel-loader和 babel-core

6)babel工作需要.babelrc文件

{
 "presets":["react","es2015"]
}

7)最重要的webpack.config.js文件的配置

var path = require('path');
var webpack = require('webpack');
var HtmlwebpackPlugin = require('html-webpack-plugin');
var ROOT_PATH = path.resolve(__dirname);
var BUILD_PATH = path.resolve(ROOT_PATH, 'build');
var APP_PATH = path.resolve(ROOT_PATH, 'app');

module.exports = {
 entry: {
 app: path.resolve(APP_PATH, 'app.js')
 },
 output: {
 path: BUILD_PATH,
 filename: '[name].bundle.js'
 },
 resolve:{
 extensions:['','.js','.jsx'],
 root:APP_PATH
 },
 module:{
 loaders:[
  {
  test: /\.js?$/,
  loaders: ['babel-loader'],
  include: APP_PATH
  }
 ]
 },
 plugins:[
 new HtmlwebpackPlugin({
  title: 'demo',
  filename:'index.html'
 }),
 ]
}

这个应该是最简单的配置了,不懂的可以网上搜,其中用到HtmlwebpackPlugin

这个插件是帮我们自动生成html页面,并自动引入打包后的.js文件,其中的参数意思是,title这个页面的title,filename生成的页面名字

8)最后的项目文件目录为

webpack打包react项目的实现方法

app是项目组件文件夹,test是测试文件

list.js代码

import React from 'react';
import uuid from 'uuid';
import ListItem from '../listItem/listItem';

class List extends React.Component {
 constructor(props) {
 super(props);
 this.state = {
  items: []
 }
 }
 handleclick() {
 const value = this.refs.addlist.value;
 const str = {
  id: uuid.v1(),
  text: value
 }
 let items = this.state.items;
 items = [...items, str];//合并数值
 this.setState({
  items
 })
 }
 //删除其中的
 deleteItem(id) {
 this.setState({
  items: this.state.items.filter(
  result => result.id !== id
  ),
 });
 }
 render() {
 const ListIt = this.state.items.map(item => {
  return (
  <ListItem key={item.id} name={item} onDelete={this.deleteItem.bind(this)} />
  );
 });
 return (
  <div className="list">
  <input type="text" placeholder="请输入" ref="addlist" />
  <button className="addbutton" onClick={this.handleclick.bind(this)}>添加值</button>
  <ul>
   {ListIt}
  </ul>
  </div>
 );
 }
}

export default List;

listitem.js

import React from 'react';

class ListItem extends React.Component {
 render() {
 const text = this.props.name;
 return (
  <li onClick={() => this.props.onDelete(text.id)}>
  <span>{text.text}</span>
  </li>
 )
 }
}

export default ListItem;

app.js文件

import React from 'react';
import ReactDOM from 'react-dom';
import List from './list/list';

const app = document.createElement('div');
document.body.appendChild(app);
ReactDOM.render(<List />, app);

9)最后的package.json文件

{
 "name": "csdndemo",
 "version": "1.0.0",
 "description": "",
 "main": "index.js",
 "scripts": {
 "dev": "webpack-dev-server --hot"
 },
 "author": "",
 "license": "ISC",
 "devDependencies": {
 "babel-core": "^6.24.0",
 "babel-loader": "^6.4.1",
 "babel-preset-es2015": "^6.24.0",
 "babel-preset-react": "^6.23.0",
 "html-webpack-plugin": "^2.28.0",
 "react": "^15.4.2",
 "react-dom": "^15.4.2",
 "webpack": "^1.14.0",
 "webpack-dev-server": "^1.14.1"
 }
}

运行项目nam run dev

10)后续会有基于这个demo的测试enzyme库的使用,代码检测aslant,flux的使用,redux的使用

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Firefox div高度自适应
Apr 28 Javascript
javascript 时间比较实现代码
Oct 28 Javascript
EasyUI中的tree用法介绍
Nov 01 Javascript
利用javascript打开模态对话框(示例代码)
Jan 11 Javascript
javascript读取Xml文件做一个二级联动菜单示例
Mar 17 Javascript
javascript顺序加载图片的方法
Jul 18 Javascript
详解js中==与===的区别
Jan 08 Javascript
jQuery实现限制文本框的输入长度
Jan 11 Javascript
Vue.js实战之Vuex的入门教程
Apr 01 Javascript
微信小程序网络请求封装示例
Jul 24 Javascript
在JS循环中使用async/await的方法
Oct 12 Javascript
jQuery加PHP实现图片上传并提交的示例代码
Jul 16 jQuery
Vue Router的懒加载路径的解决方法
Jun 21 #Javascript
详解如何使用webpack打包JS
Jun 21 #Javascript
vue自定义一个v-model的实现代码
Jun 21 #Javascript
JS实现模糊查询带下拉匹配效果
Jun 21 #Javascript
浅析Vue 生命周期
Jun 21 #Javascript
vue数组对象排序的实现代码
Jun 20 #Javascript
vue项目实现github在线预览功能
Jun 20 #Javascript
You might like
简单实用的PHP防注入类实例
2014/12/05 PHP
基于Asp.net与Javascript控制的日期控件
2010/05/22 Javascript
javascript字符串拼接的效率问题
2010/12/25 Javascript
javascript自适应宽度的瀑布流实现思路
2013/02/20 Javascript
JS在IE下缺少标识符的错误
2014/07/23 Javascript
jQuery获得指定元素坐标的方法
2015/04/14 Javascript
js实现不提交表单获取单选按钮值的方法
2015/08/21 Javascript
JavaScript数组方法总结分析
2016/05/06 Javascript
快速获取/设置iframe内对象元素的几种js实现方法
2016/05/20 Javascript
第一次动手实现bootstrap table分页效果
2016/09/22 Javascript
json定义及jquery操作json的方法
2016/09/29 Javascript
nodejs+mongodb aggregate级联查询操作示例
2018/03/17 NodeJs
微信小程序实现收藏与取消收藏切换图片功能
2018/08/03 Javascript
vue-simple-uploader上传成功之后的response获取代码
2020/09/07 Javascript
[03:06]V社市场总监Dota2项目负责人Erik专访:希望更多中国玩家加入DOTA2
2014/07/11 DOTA
使用Python的urllib2模块处理url和图片的技巧两则
2016/02/18 Python
解决python3 网络请求路径包含中文的问题
2018/05/10 Python
Python多继承顺序实例分析
2018/05/26 Python
python-opencv颜色提取分割方法
2018/12/08 Python
在Django的View中使用asyncio的方法
2019/07/12 Python
Python socket模块方法实现详解
2019/11/05 Python
关于tf.nn.dynamic_rnn返回值详解
2020/01/20 Python
keras训练曲线,混淆矩阵,CNN层输出可视化实例
2020/06/15 Python
CPB肌肤之钥美国官网:Clé de Peau Beauté
2017/09/05 全球购物
美国高级音响品牌:Master&Dynamic
2018/07/05 全球购物
乌克兰在线电子产品商店:MTA
2019/11/14 全球购物
介绍一下Transact-SQL中SPACE函数的用法
2015/09/01 面试题
岳父生日宴会答谢词
2014/01/13 职场文书
新闻编辑自荐书范文
2014/02/12 职场文书
个人剖析材料及整改措施
2014/10/07 职场文书
合伙开公司协议书范本
2014/10/28 职场文书
2015年统战工作总结
2015/05/19 职场文书
团队拓展训练心得体会
2016/01/12 职场文书
JavaScript流程控制(循环)
2021/12/06 Javascript
德劲DE1105机评
2022/04/05 无线电
设置IIS Express并发数
2022/07/07 Servers