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 相关文章推荐
JS+JSP checkBox 全选具体实现
Jan 02 Javascript
javascript事件冒泡详解和捕获、阻止方法
Apr 12 Javascript
jQuery简单实现验证邮箱格式
Jul 15 Javascript
javascript随机抽取0-100之间不重复的10个数
Feb 25 Javascript
javascript时间排序算法实现活动秒杀倒计时效果
Jan 28 Javascript
JavaScript用JSONP跨域请求数据实例详解
Jan 06 Javascript
理解javascript中的Function.prototype.bind的方法
Feb 03 Javascript
javascript常用的设计模式
Feb 09 Javascript
jQuery实现鼠标点击处心形漂浮的炫酷效果示例
Apr 12 jQuery
微信小程序class封装http代码实例
Aug 24 Javascript
nuxt.js写项目时增加错误提示页面操作
Nov 05 Javascript
8个非常实用的Vue自定义指令
Dec 15 Vue.js
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代码
2007/03/03 PHP
php Smarty date_format [格式化时间日期]
2010/03/15 PHP
PHP gbk环境下json_dencode传送来的汉字
2012/11/13 PHP
php结合js实现点击超链接执行删除确认操作
2014/10/31 PHP
php源码的使用方法讲解
2019/09/26 PHP
Thinkphp框架使用list_to_tree 实现无限级分类列出所有节点示例
2020/04/04 PHP
让iframe子窗体取父窗体地址栏参数(querystring)
2009/10/13 Javascript
一些常用弹出窗口/拖放/异步文件上传等实用代码
2013/01/06 Javascript
JavaScript实现的链表数据结构实例
2015/04/02 Javascript
jQuery实现的网页右下角tab样式在线客服效果代码
2015/10/23 Javascript
JavaScript 基础函数_深入剖析变量和作用域
2016/05/18 Javascript
浅谈JavaScript 执行环境、作用域及垃圾回收
2016/05/31 Javascript
node.js路径处理方法以及绝对路径详解
2021/03/04 Javascript
js实现简单的秒表
2020/01/16 Javascript
vue data变量相互赋值后被实时同步的解决步骤
2020/08/05 Javascript
11个Javascript小技巧帮你提升代码质量(小结)
2020/12/28 Javascript
[02:57]DOTA2亚洲邀请赛 SECRET战队出场宣传片
2015/02/07 DOTA
Python写入CSV文件的方法
2015/07/08 Python
微信跳一跳辅助python代码实现
2018/01/05 Python
Python使用matplotlib填充图形指定区域代码示例
2018/01/16 Python
Python简单获取网卡名称及其IP地址的方法【基于psutil模块】
2018/05/24 Python
Anaconda+Pycharm环境下的PyTorch配置方法
2020/03/13 Python
Moda Italia荷兰:意大利男士服装
2019/08/31 全球购物
计算机专业个人求职信范例
2013/09/23 职场文书
销售演讲稿范文
2014/01/08 职场文书
自我鉴定怎么写
2014/01/12 职场文书
制药工程专业个人求职自荐信
2014/01/25 职场文书
军训鉴定表自我鉴定
2014/02/13 职场文书
运动会稿件300字
2014/02/14 职场文书
酒店员工职业生涯规划
2014/02/25 职场文书
远程网络教育毕业生自我鉴定
2014/04/14 职场文书
公司法定代表人授权委托书
2014/09/29 职场文书
幼儿园六一儿童节开幕词
2016/03/04 职场文书
2019最新版试用期劳动合同模板!
2019/07/04 职场文书
Golang之sync.Pool使用详解
2021/05/06 Golang
vue+spring boot实现校验码功能
2021/05/27 Vue.js