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 相关文章推荐
理解JavaScript中的事件
Sep 23 Javascript
Ajax一统天下之Dojo整合篇
Mar 24 Javascript
Mootools 1.2教程 设置和获取样式表属性
Sep 15 Javascript
javascript 快速排序函数代码
May 30 Javascript
jquery获取自定义属性(attr和prop)实例介绍
Apr 21 Javascript
用jQuery与JSONP轻松解决跨域访问的问题
Feb 04 Javascript
jquery实现的树形目录实例
Jun 26 Javascript
jquery实现删除一个元素后面的所有元素功能
Dec 21 Javascript
解决vue+webpack打包路径的问题
Mar 06 Javascript
JS同步、异步、延迟加载的方法
May 05 Javascript
vue-router中的hash和history两种模式的区别
Jul 17 Javascript
vue 移动端注入骨架屏的配置方法
Jun 25 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+mysql留言本源码
2009/11/11 PHP
PHP输出时间差函数代码
2013/01/28 PHP
php截取中文字符串不乱码的方法
2013/12/25 PHP
php实现的任意进制互转类分享
2015/07/07 PHP
IE FF OPERA都可用的弹出层实现代码
2009/09/29 Javascript
JS 实现点击a标签的时候让其背景更换
2013/10/15 Javascript
jquery实现根据浏览器窗口大小自动缩放图片的方法
2015/07/17 Javascript
Jquery和BigFileUpload实现大文件上传及进度条显示
2016/06/27 Javascript
JSON 数据详解及实例代码分析
2017/01/20 Javascript
原生js检测页面加载完毕的实例
2018/09/11 Javascript
从Vuex中取出数组赋值给新的数组,新数组push时报错的解决方法
2018/09/18 Javascript
js设计模式之代理模式及订阅发布模式实例详解
2019/08/15 Javascript
jqGrid表格底部汇总、合计行footerrow处理
2019/08/21 Javascript
原生javascript自定义input[type=radio]效果示例
2019/08/27 Javascript
微信小程序工具函数封装
2019/10/28 Javascript
vue.js路由mode配置之去掉url上默认的#方法
2019/11/01 Javascript
微信小程序实现音乐播放器
2019/11/20 Javascript
JavaScript 实现自己的安卓手机自动化工具脚本(推荐)
2020/05/13 Javascript
javascript前端和后台进行数据交互方法示例
2020/08/07 Javascript
小程序自定义圆形进度条
2020/11/17 Javascript
Python字符遍历的艺术
2008/09/06 Python
python中的多线程实例教程
2014/08/27 Python
python中字典(Dictionary)用法实例详解
2015/05/30 Python
Python爬虫模拟登录带验证码网站
2016/01/22 Python
Python中定时任务框架APScheduler的快速入门指南
2017/07/06 Python
用python给自己做一款小说阅读器过程详解
2019/07/11 Python
基于numpy中的expand_dims函数用法
2019/12/18 Python
Python爬取微信小程序通用方法代码实例详解
2020/09/29 Python
世界上获奖最多的手机镜头:Olloclip
2018/03/03 全球购物
日常奢侈品,轻松购物:Verishop
2019/08/20 全球购物
房屋继承公证书
2014/04/10 职场文书
村党支部书记承诺书
2014/05/29 职场文书
法律意见书范文
2015/06/04 职场文书
成本低的5个创业项目:投资小、赚钱快
2019/08/20 职场文书
Nginx配置之禁止指定IP访问
2022/05/02 Servers
Java实现字符串转为驼峰格式的方法详解
2022/07/07 Java/Android