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 下[使用event很麻烦] 的问题.
Aug 22 Javascript
jquery实现每个数字上都带进度条的幻灯片
Feb 20 Javascript
Javascript表格翻页效果实现思路及代码
Aug 23 Javascript
jQuery如何获取同一个类标签的所有值(默认无法获取)
Sep 25 Javascript
jQuery获取对象简单实现方法小结
Oct 30 Javascript
jQuery实现带幻灯的tab滑动切换风格菜单代码
Aug 27 Javascript
基于jQuery实现动态搜索显示功能
May 05 Javascript
js获取一组日期中最近连续的天数
May 25 Javascript
AngularJS实现页面跳转后自动弹出对话框实例代码
Aug 02 Javascript
vue 中 elment-ui table合并上下两行相同数据单元格
Dec 26 Javascript
vue实现列表滚动的过渡动画
Jun 29 Javascript
javascript解析json格式的数据方法详解
Aug 07 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
DOTA2【瓜皮时刻】Vol.91 RTZ山史最惨“矿难”
2021/03/05 DOTA
php strcmp使用说明
2010/04/22 PHP
php守护进程 加linux命令nohup实现任务每秒执行一次
2011/07/04 PHP
php创建session的方法实例详解
2015/01/27 PHP
浅谈PHP进程管理
2019/03/08 PHP
Document 对象的常用方法
2009/07/31 Javascript
jquery1.4.2 for Visual studio 2010 模板文件
2010/07/14 Javascript
基于jquery的回到页面顶部按钮
2011/06/27 Javascript
javascript自适应宽度的瀑布流实现思路
2013/02/20 Javascript
浅析jQuery中调用ajax方法时在不同浏览器中遇到的问题
2014/06/11 Javascript
node.js中的Socket.IO使用实例
2014/11/04 Javascript
jQuery常用数据处理方法小结
2015/02/20 Javascript
详谈LABJS按需动态加载js文件
2015/05/07 Javascript
SpringMVC返回json数据的三种方式
2015/12/10 Javascript
jquery编写日期选择器
2017/03/16 Javascript
基于JavaScript实现的希尔排序算法分析
2017/04/14 Javascript
ionic2自定义cordova插件开发以及使用(Android)
2017/06/19 Javascript
JavaScript对象_动力节点Java学院整理
2017/06/23 Javascript
JointJS流程图的绘制方法
2018/12/03 Javascript
angularjs1.X 重构controller 的方法小结
2019/08/15 Javascript
HTML+JavaScript实现扫雷小游戏
2019/09/30 Javascript
vue h5移动端禁止缩放代码
2019/10/28 Javascript
vue 在methods中调用mounted的实现操作
2020/08/07 Javascript
Python Selenium 之关闭窗口close与quit的方法
2019/02/13 Python
Python3.5面向对象编程图文与实例详解
2019/04/24 Python
Python:二维列表下标互换方式(矩阵转置)
2019/12/02 Python
jupyter notebook 实现matplotlib图动态刷新
2020/04/22 Python
英国领先的奢侈品零售商之一:CRUISE
2016/12/02 全球购物
法律工作求职自荐信
2013/10/31 职场文书
最新自我评价范文
2013/11/16 职场文书
魅力教师事迹材料
2014/01/10 职场文书
吨的认识教学反思
2014/04/27 职场文书
领导班子三严三实心得体会
2014/10/13 职场文书
小学大队长竞选稿
2015/11/20 职场文书
解决mysql问题:由于找不到MSVCR120.dll,无法继续执行代码
2021/06/26 MySQL
mysql函数全面总结
2021/11/11 MySQL