轻松搭建 JavaScript 2015 Development Tools 开发/生产环境

坍缩循环
• 阅读 5491

[重构] 2016-3-4

Introduction

基础结构参考自https://github.com/gaearon/react-transform-boilerplate

作者Dan Abramov

react-webpack-babel-development-tools

在其基础之上添加了对主业务资源,js库资源,css资源的分离打包,和对生产环境html的模板的生成

Usage

git clone https://github.com/qianjiahao/webpack-babel-react-development-tools.git [your project name]
cd [your project name]
npm install

development

npm start -> http://localhost:3000

production

npm run build

Detail

分离主业务与库资源

// webpack.config.dev.js

entry: {
  app: [
    'eventsource-polyfill', // necessary for hot reloading with IE
    'webpack-hot-middleware/client',
    './src/index'
  ],
  vendors: ['react']
},

// 将主业务与库资源分离
// 优势:当我们更新项目时,如果库资源没有涉及更新,直接打包主业务资源即可;
// 并且分离库资源后的主资源文件大小也非常的小,可加快文件的下载速度,节省流量。
plugins: [
  new webpack.optimize.CommonsChunkPlugin('vendors', '[name].js'),
],

// 根据我们的entry打包库资源,名字由entry的名字命名。

分离合并样式资源文件

// 由于我们在entry的文件中引入了样式文件 src/App.js
import './styles/common.css';

// webpack.config.dev.js

var ExtractTextPlugin = require('extract-text-webpack-plugin');

module: {
  loaders: [
    {
      test: /\.css$/, loader: ExtractTextPlugin.extract('style', 'css')
    }
  ]
}

plugins: [
  new ExtractTextPlugin('style.css')
],

// 我们需要 style-loader , css-loader 模块去加载引入的资源文件,
并通过 extract-text-webpack-plugin 来合并打包样式资源,命名为 style.css 。

加载打包图片

// webpack.config.dev.js

module: {
  loaders: [
    {
      test: /\.(png|jpg)$/, loader: 'url?limit=25000'
    }
  ]
}

// 我们选择加载的图片格式为png或jpg,并限定当文件小于25kb,转换为base64编码。
// 优势:将一些小并且不常更新的图片转换base64编码后,可以减少一次或多次http请求。
// 但这个limit应该定义成一个合适的值,因为如果将稍大些的图片转为base64后,会生成大量字符,
// 反而降低我们的加载速度。

加载font/svg

// webpack.config.dev.js

module: {
  loaders: [
    {
      test: /\.woff(\?v=\d+\.\d+\.\d+)?$/,
      loader: "url?limit=10000&mimetype=application/font-woff"
    },{
      test: /\.ttf(\?v=\d+\.\d+\.\d+)?$/,
      loader: "url?limit=10000&mimetype=application/octet-stream"
    },{
      test: /\.eot(\?v=\d+\.\d+\.\d+)?$/,
      loader: "file"
    },{
      test: /\.svg(\?v=\d+\.\d+\.\d+)?$/,
      loader: "url?limit=10000&mimetype=image/svg+xml"
    }
  ]
}

加载Google Material icons

// 我们使用google开源的icon库,首先引入资源文件 src/template/index.ejs 、index.html

<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">

// 本地我们需要定义一些样式  src/styles/font.css

.material-icons {
  font-family: 'Material Icons';
  font-weight: normal;
  font-style: normal;
  font-size: 24px;  /* Preferred icon size */
  display: inline-block;
  line-height: 1;
  text-transform: none;
  letter-spacing: normal;
  word-wrap: normal;
  white-space: nowrap;
  direction: ltr;

  /* Support for all WebKit browsers. */
  -webkit-font-smoothing: antialiased;
  /* Support for Safari and Chrome. */
  text-rendering: optimizeLegibility;

  /* Support for Firefox. */
  -moz-osx-font-smoothing: grayscale;

  /* Support for IE. */
  font-feature-settings: 'liga';
}

/* Rules for sizing the icon. */
.material-icons.md-18 { font-size: 18px; }
.material-icons.md-24 { font-size: 24px; }
.material-icons.md-36 { font-size: 36px; }
.material-icons.md-48 { font-size: 48px; }
.material-icons.md-56 { font-size: 56px; }
.material-icons.md-64 { font-size: 64px; }
.material-icons.md-80 { font-size: 80px; }

/* Rules for using icons as black on a light background. */
.material-icons.md-dark { color: rgba(0, 0, 0, 0.54); }
.material-icons.md-dark.md-inactive { color: rgba(0, 0, 0, 0.26); }

/* Rules for using icons as white on a dark background. */
.material-icons.md-light { color: rgba(255, 255, 255, 1); }
.material-icons.md-light.md-inactive { color: rgba(255, 255, 255, 0.3); }

// 使用时就选择合适的icon即可,注意:在react中,class需要改为className  src/App.js

<i className="material-icons md-36">face</i>

生成html文件

// 定义模板 src/template/index.ejs

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="initial-scale=1.0, user-scalable=no, width=device-width">
    <title><%= htmlWebpackPlugin.options.title %></title>
</head>
<body>

    <div id="root"></div>
</body>
</html>

// webpack.config.dev.js

var Html = require('html-webpack-plugin');

plugins: [
  new Html({
    title: 'webpack-babel-react-development-tools',
    filename: 'index.html',
    template: path.join(__dirname, 'src/template/index.ejs')
  }),
],

// 通过工具来生成我们的模板文件,title会替换index.ejs中的title,
// filename定义了生成文件的名字,template定义了模板的路径,
// [html-webpack-plugin@2.x版本后,工具生成的资源文件会已chunk的形式自动注入]。

生产环境

通过将文件名添加hash来强制让用户更新资源文件,防止旧文件对项目的影响。
点赞
收藏
评论区
推荐文章
blmius blmius
4年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
美凌格栋栋酱 美凌格栋栋酱
7个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Jacquelyn38 Jacquelyn38
4年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
可莉 可莉
3年前
18个常用 webpack插件,总会有适合你的!
!(https://oscimg.oschina.net/oscnet/71317da0c57a8e8cf5011c00e302a914609.jpg)来源| https://github.com/Michaellzg/myarticle/blob/master/webpack/Plugin何为插
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
PHP创建多级树型结构
<!lang:php<?php$areaarray(array('id'1,'pid'0,'name''中国'),array('id'5,'pid'0,'name''美国'),array('id'2,'pid'1,'name''吉林'),array('id'4,'pid'2,'n
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Python进阶者 Python进阶者
1年前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这
坍缩循环
坍缩循环
Lv1
春眠不觉晓,处处闻啼鸟。夜来风雨声,花落知多少!
文章
4
粉丝
0
获赞
0