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 多种变量定义(对象直接量,数组直接量和函数直接量)
May 24 Javascript
jQuery判断一个元素是否可见的方法
Jun 05 Javascript
原生js实现模拟滚动条
Jun 15 Javascript
Highcharts 多个Y轴动态刷新数据的实现代码
May 28 Javascript
浅谈JavaScript的push(),pop(),concat()方法
Jun 03 Javascript
AngularJS之依赖注入模拟实现
Aug 19 Javascript
JS对象深度克隆实例分析
Mar 16 Javascript
从零开始学习Node.js系列教程之基于connect和express框架的多页面实现数学运算示例
Apr 13 Javascript
Vue项目全局配置微信分享思路详解
May 04 Javascript
Vue高版本中一些新特性的使用详解
Sep 25 Javascript
vue实现将数据存入vuex中以及从vuex中取出数据
Nov 08 Javascript
WEB前端性能优化的7大手段详解
Feb 04 Javascript
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 array_flip() 删除数组重复元素
2009/01/14 PHP
在PHP中PDO解决中文乱码问题的一些补充
2010/09/06 PHP
深入php多态的实现详解
2013/06/09 PHP
PHP中数组定义的几种方法
2013/09/01 PHP
php自定义urlencode,urldecode函数实例
2015/03/24 PHP
PHP性能分析工具XHProf安装使用教程
2015/05/13 PHP
用javascript父窗口控制只弹出一个子窗口
2007/04/10 Javascript
AngularJS基础 ng-copy 指令实例代码
2016/08/01 Javascript
关于验证码在IE中不刷新的快速解决方法
2016/09/23 Javascript
微信小程序 页面传值详解
2017/03/10 Javascript
js匿名函数使用&amp;传参(实例)
2017/09/08 Javascript
React如何避免重渲染
2018/04/10 Javascript
详解小程序不同页面之间通讯的解决方案
2018/11/23 Javascript
vue-cli中安装方法(图文详细步骤)
2018/12/12 Javascript
详解如何在JS代码中消灭for循环
2019/12/11 Javascript
文章或博客自动生成章节目录索引(支持三级)的实现代码
2020/05/10 Javascript
[50:01]Ti4 冒泡赛第二天 NEWBEE vs Titan
2014/07/15 DOTA
Python3字符串学习教程
2015/08/20 Python
Python PyQt5实现的简易计算器功能示例
2017/08/23 Python
Python编程中flask的简介与简单使用
2018/12/28 Python
python fuzzywuzzy模块模糊字符串匹配详细用法
2019/08/29 Python
python实现ip地址查询经纬度定位详解
2019/08/30 Python
python 和c++实现旋转矩阵到欧拉角的变换方式
2019/12/04 Python
python下载卫星云图合成gif的方法示例
2020/02/18 Python
利用python实现凯撒密码加解密功能
2020/03/31 Python
浅谈CSS3特性查询(Feature Query: @supports)功能简介
2017/07/31 HTML / CSS
HTML5 body设置全屏背景图片的示例代码
2020/12/08 HTML / CSS
End Clothing美国站:英国男士潮牌商城
2018/04/20 全球购物
英国家庭和商业健身器材购物网站:Fitness Options
2018/07/05 全球购物
英智兴达软件测试笔试题
2016/10/12 面试题
高中生毕业自我鉴定
2013/10/10 职场文书
优秀导游先进事迹材料
2014/01/25 职场文书
个人反四风对照检查材料思想汇报
2014/09/23 职场文书
校园安全广播稿范文
2014/09/25 职场文书
劳资员岗位职责
2015/02/13 职场文书
如何让vue长列表快速加载
2021/03/29 Vue.js