利用yarn实现一个webpack+react种子


Posted in Javascript onOctober 25, 2016

一、初始化项目

首先确保你的node 版本 >=4.0.并且确保yarn可以正常工作,关于安装yarn,你可以看这里

我们先创建个空文件夹 比如yarn-react-webpack-seed,然后输入命令:

yarn init

yarn 如果没有安装,全程用 npm代替也没问题。

项目会初始化 package.json ,然后填写一些基本信息即可。

接下来我们开始安装依赖项,再 package.json 的添加下面内容

"dependencies": {
 "react": "^15.4.0-rc.4",
 "react-dom": "^15.3.2",
 "react-router": "^2.8.1"
 },
 "devDependencies": {
 "babel": "^6.5.2",
 "babel-core": "^6.17.0",
 "babel-loader": "^6.2.5",
 "babel-preset-es2015": "^6.16.0",
 "babel-preset-react": "^6.16.0",
 "history": "^4.3.0",
 "react-hot-loader": "^3.0.0-beta.6",
 "webpack": "^1.13.2",
 "webpack-dev-server": "^1.16.2"
 },

运行命令:

yarn install

你也可以自行添加依赖,输入yarn add xxx即可。

yarn add react 
yarn add webpack --dev 
...

项目创建好后,我们接下来创建一些必要的文件和目录;

+ build
+ src
- webpack.config.js
- package.json
- index.html
- server.js

二、webpack

webpack (更多)是一款模块处理器,他会将你所有的代码打包成静态文件,放到你的开发的App中。

打开webpack.config.js,然后添加下面的代码:

var webpack = require('webpack');

module.exports = { 
 entry: [
  "webpack-dev-server/client?http://localhost:9000",
  'webpack/hot/only-dev-server',
  "./src/index"
 ],
 output: {
 path: __dirname + '/build',
 filename: "bundle.js",
 publicPath: '/build/',
 },
 module: {
 loaders: [
  {
  test: /\.js?$/,
  loaders: ["react-hot-loader/webpack",'babel-loader?presets[]=react,presets[]=es2015'],
  exclude: /node_modules/
  },

  {
  test: /\.less$/,
  loader: "style!css!less"
  }
  ]
 },
 plugins: [
  new webpack.NoErrorsPlugin(),
  new webpack.HotModuleReplacementPlugin()
 ]
};

这份文件大概有四个配置项entry, output, module,plugins.

     entry:指定打包的入口文件,每有一个键值对,就是一个入口文件。

     output:配置打包结果,path定义了输出的文件夹,filename则定义了打包结果文件的名称,filename里面的[name]会由entry中的键替换,例子中的/build/bundle.js便是生成的文件。

     module:定义了对模块的处理逻辑,这里可以用loaders定义了一系列的加载器,以及一些正则。当需要加载的文件匹配test的正则时,就会进行处理。这里我们使用了react-hot 和 babel。babel-loader是我们使用ES-6进行开发时用于生成JS文件。

     loader对文件进行处理,这正是webpack强大的原因。比如这里定义了凡是.js结尾的文件都是用babel-loader做处理,而.jsx结尾的文件会先经过jsx-loader处理,然后经过babel-loader处理。yarn add添加这些插件。babel中的preset配置你也可以.babelr文件中定义:

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

     plugins: 这里定义了需要使用的插件,比如commonsPlugin在打包多个入口文件时会提取出公用的部分,生成common.js。

这个时候我们再package.json中加入script 字段,

"scripts": {
 "start": "node server.js",
 "build": "webpack --progress --colors"
 }

这个时候我们输入一个yarn start命令时候我们会启动一个webpack server这个时候你可以访问 http://localhost:9000/ 看到我们的页面了; 如果你使用yarn run build时候可以将文件自动生成到bulid/下。

接下来我们新建index.html文件

<!doctype html> 
<html lang="en" > 
<head> 
<meta charset="UTF-8"> 
<title>React+React-Router+Webpack+Yarn Seed</title> 
<meta http-equiv="X-UA-Compatible" content="IE=edge"> 
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no"> 
</head> 
<body > 
<div id="app"></div> 
<script src="./build/bundle.js"></script> 
</body> 
</html>

在index.html中最重要的是引入 bundle.js,实际上index.html你可以随意修改任何代码,重要是的引入生成后的文件以及含有react渲染的DOM。

三、React-router

完成项目的基本创建,接下来我们创建src/index.js项目的入口文件。代码如下:

import React from 'react'; 
import ReactDOM from 'react-dom'; 
import App from './app';

ReactDOM.render(<App />, document.getElementById('app'));

接下来我们再创建一些包含路由组件的文件src/app.js

import React, { Component } from 'react'; 
import { render } from 'react-dom'; 
import { Router, Route, hashHistory } from 'react-router'; 
// components
import Links from './components/links.js'; 
import Start from './components/start.js'; 
import Guide from './components/guide.js'; 
import How from './components/how.js';

class App extends Component { 
 render() {
 return (
  <Router history={hashHistory}>
  <Route path="/" component={Links}>
   <Route path="/start" component={Start}/>
   <Route path="/how" component={How}/>
   <Route path="/guide" component={Guide}/>
  </Route>
 </Router> 
 );
 }
}
export default App;

头部是我们将要用的reactreact-router的模块引进来。 同时我们把用到的组件Links,Start,Guide等引进来。然后我们需要配置router

Route中设置具体的path 和组件。

接下来我们看看如何进行路由的切换,这些内容存放到src/components/links.js中。

import React from 'react'; 
import { Link } from 'react-router' 
let Links = React.createClass({ 

 render() {
 return(
  <div>
  <aside>
   <h4>Categories</h4>
   <ul role="nav">
   <li><Link to="/start" activeStyle={{color:'#3498db'}}>Start</Link></li>
   <li><Link to="/how" activeStyle={{color:'#3498db'}}>How</Link></li>
   <li><Link to="/guide" activeStyle={{color:'#3498db'}}>Guide</Link></li>
   </ul>
  </aside>

  <div className="page main">
   {this.props.children}
  </div>
  </div>
 );
 }
});

export default Links;

在Link 中我们可以指定具体的路由地址。

剩下的就是添加组件了,比如我们添加一个简单的start.js到components下面。

import React from 'react';

let Start = React.createClass({ 

 render() {
 return(
  <div className="c-home">
  <img alt="guide" src="http://img1.vued.vanthink.cn/vuedd144134a46129d7068d36025d64ba905.png" />
  <h4>React+React-Router+Webpack+Yarn Seed</h4>
  </div>
 );
 }
});
export default Start;

其他的组件代码就不详细展示了。

这个时候我们输入yarn run build,我们可以看到build下会生成一个bundle.js 文件。 如果输入 yarn run start就可以看见页面了

本地输入 yarn start 然后访问 http://localhost:9000 就可以看到自己写的内容了。

关于React-Router的更多配置,可以参考官方文档的教程。

四、发布

实际上我们有很多方法可以上线你的服务,但是非常好的一件事情是webpack 可以轻松的使用生成的文件。其中你可以快速的将这些资源文件放到cdn上,然后将index.html放到主机上,更新我们的脚本路径就可以了。

这次改变用yarn的安装速度确实比原来npm快了很多几乎都是10s内就完成了。不需要长时间等待或者切换taobao npm 镜像。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。

Javascript 相关文章推荐
javascript字典探测用户名工具
Oct 05 Javascript
JavaScript 学习初步 入门教程
Mar 25 Javascript
js 多种变量定义(对象直接量,数组直接量和函数直接量)
May 24 Javascript
理解Javascript_06_理解对象的创建过程
Oct 15 Javascript
CheckBoxList多选样式jquery、C#获取选择项
Sep 06 Javascript
javascript实现列表滚动的方法
Jul 30 Javascript
今天抽时间给大家整理jquery和ajax的相关知识
Nov 17 Javascript
bootstrap daterangepicker汉化以及扩展功能
Jun 15 Javascript
小程序实现人脸识别功能(百度ai)
Dec 23 Javascript
如何获取vue单文件自身源码路径
May 06 Javascript
Javascript 对象(object)合并操作实例分析
Jul 30 Javascript
详解Angular Karma测试的持续集成实践
Nov 15 Javascript
Yarn的安装与使用详细介绍
Oct 25 #Javascript
jQuery通过ajax快速批量提交表单数据
Oct 25 #Javascript
jquery popupDialog 使用 加载jsp页面的方法
Oct 25 #Javascript
JavaScript模仿Pinterest实现图片预加载功能
Oct 25 #Javascript
微信小程序 video组件详解
Oct 25 #Javascript
微信小程序 form组件详解
Oct 25 #Javascript
微信小程序 icon组件详细及实例代码
Oct 25 #Javascript
You might like
dede3.1分页文字采集过滤规则详说(图文教程)
2007/04/03 PHP
php 无限分类的树类代码
2009/12/03 PHP
php数组函数序列之array_flip() 将数组键名与值对调
2011/11/07 PHP
解析Win7 XAMPP apache无法启动的问题
2013/06/26 PHP
php面象对象数据库操作类实例
2014/12/02 PHP
PHP加密解密函数详解
2015/10/28 PHP
PHP中的表达式简述
2016/05/29 PHP
php模拟post上传图片实现代码
2016/06/24 PHP
PHP join()函数用法与实例讲解
2019/03/11 PHP
ThinkPHP5 框架引入 Go AOP,PHP AOP编程项目详解
2020/05/12 PHP
Egret引擎开发指南之运行项目
2014/09/03 Javascript
js实现点击按钮后给Div图层设置随机背景颜色的方法
2015/05/06 Javascript
浏览器环境下JavaScript脚本加载与执行探析之defer与async特性
2016/01/14 Javascript
jQuery实现对无序列表的排序功能(附demo源码下载)
2016/06/25 Javascript
JavaScript实现横线提示输入验证码随输入验证码输入消失的方法
2016/09/24 Javascript
利用Angular.js限制textarea输入的字数
2016/10/20 Javascript
AngularJS 中使用Swiper制作滚动图不能滑动的解决方法
2016/11/15 Javascript
vue项目中做编辑功能传递数据时遇到问题的解决方法
2016/12/19 Javascript
vuejs2.0运用原生js实现简单的拖拽元素功能示例
2017/02/24 Javascript
vue中父子组件注意事项,传值及slot应用技巧
2018/05/09 Javascript
Vue使用Proxy代理后仍无法生效的解决
2020/11/13 Javascript
[05:31]DOTA2英雄梦之声_第04期_光之守卫
2014/06/23 DOTA
[02:20]2014DOTA2西雅图邀请赛 MVP外卡赛首胜采访
2014/07/09 DOTA
跟老齐学Python之变量和参数
2014/10/10 Python
详谈Python2.6和Python3.0中对除法操作的异同
2017/04/28 Python
python3调用百度翻译API实现实时翻译
2018/08/16 Python
Python3.5装饰器原理及应用实例详解
2019/04/30 Python
澳大利亚二手奢侈品网站:Modsie
2019/09/23 全球购物
求职自荐信范文格式
2013/11/29 职场文书
高中毕业自我鉴定
2013/12/16 职场文书
学生会竞选演讲稿纪检部
2014/08/25 职场文书
单位租车协议书
2015/01/29 职场文书
天下第一关导游词
2015/02/06 职场文书
贫民窟的百万富翁观后感
2015/06/09 职场文书
心理学培训心得体会
2016/01/22 职场文书
Java Optional<Foo>转换成List<Bar>的实例方法
2021/06/20 Java/Android