Material-UI + React + Babel + Webpack 环境配置

原创 2016年05月16日 03:40:13

Material-UI

Material-UI 是一套用React写成的,符合Google Material Design 的UI组件库。

此库在编写的时候用到了ES6与ES7的一些特性,并用Babel构建,于是我稍作研究,给出最小的环境配置来使用Material-UI这套库。

初始化

创建一个项目目录并初始化项目(如果没有的话)

$ mkdir hello-material-ui
$ cd hello-material-ui
$ npm init

安装依赖

按照npm的提示初始化完毕这个目录后,开始安装依赖

$ npm install --save react react-dom react-tap-event-plugin material-ui
$ npm install --save-dev babel-core babel-loader 
$ npm install --save-dev babel-preset-es2015 babel-preset-react babel-preset-stage-1
$ npm install --save-dev webpack

第一行是生产用的 React 与 Material-UI 部分。
第二行是Babel转换器的核心部分。
第三行是Babel转换器的三个额外配置:ES2015(ES6),React,Stage1(ES7)。
第四行是Webpack的部分。

第二、三、四行的内容只在工程构建之前有用(用于开发:-dev)。

安装完毕之后呢,可以先检查一下 package.json

npm init 之后,目录中就会有一个 package.json

如果安装顺利,里面应该有至少这样一些部分:

版本号不重要,各位配置的时候说不定已经出了新的版本。
如果确认跟随本文配置失败,那可以试试完全按照我的版本号来配置。

  "dependencies": {
    "material-ui": "^0.15.0",
    "react": "^15.0.0",
    "react-dom": "^15.0.0",
    "react-tap-event-plugin": "^1.0.0"
  },
  "devDependencies": {
    "babel-core": "^6.8.0",
    "babel-loader": "^6.2.4",
    "babel-preset-es2015": "^6.6.0",
    "babel-preset-react": "^6.5.0",
    "babel-preset-stage-1": "^6.5.0",
    "webpack": "^1.13.0"
  }

配置 Babel

配置Babel的方案有两种,一种是在目录中新建一个.babelrc 的文件,然后按照JSON格式写入规则。

另一种,可以将.babelrcpackage.json 合并(个人推荐):

package.json 中添加一个域"babel",与之前的"dependencies" 同级。

  "babel": {
    "presets": [
      "es2015",
      "react",
      "stage-1"
    ],
    "plugins": []
  }

这等同于在.babelrc 中写入:

{
  "presets": [
    "es2015",
    "react",
    "stage-1"
  ],
  "plugins": []
}

这样就将Babel配置好了,接下来考虑一下配置Webpack。

配置 Webpack

在项目目录新建一个webpack.config.js ,并写入:

var path = require('path');

module.exports = {
    entry: './entry.js',
    output: {
        path: path.join(__dirname, '/dist'),
        filename: 'bundle.js'
    },
    resolve: {
        extensions: ['', '.js', '.jsx']
    },
    module: {
        loaders: [
            { test: /\.jsx?$/, loaders: ['babel'] }
        ]
    }
}

看上去很像一个JSON,但它其实不是,它是一个JS对象,你可以把webpack.config.js 当成一个模块。

比起JSON,用JS模块来作为配置更灵活。因为JS模块可以进行运算,甚至配置一些自定义函数。而JSON只能配置一些比较死的东西。

其实也大致能猜出一二的,整个项目的入口是./entry.js ——与webpack.config.js 同个目录下的一个JS文件。

具体各个域都有什么用,更多的配置,参见官方文档

配置 npm 脚本

现在我们还缺少一个构建脚本,编辑package.json 中的 "scripts" 域:

  "scripts": {
    "build": "webpack",
    "build-dev": "webpack -w -d"
  }

接下来我们就可以在项目目录下使用简单的构建脚本了:

$ npm run build

如果是开发中,可以使用监听式的Webpack,差量打包,提升效率。

$ npm run build-dev

按照配置,打包生成的文件为 dist/bundle.js

至此,基本的环境已经配置完毕,我们来尝试一下调用Material-UI库。


Hello, Material-UI!

接下来用一个简洁的方式构建一个Web页面。

创建Web入口

在项目目录下创建一个index.html,写入:

<!doctype html>
<html>
    <head>
        <meta charset="utf-8" />
    </head>
    <body>
        <script src="dist/bundle.js"></script>
    </body>
</html>

这是最基本的入口,仅设置了编码,并引用了JS。

编写Webpack入口

编辑项目目录下的 entry.js,写入:

import React from 'react';
import ReactDOM from 'react-dom';
import getMuiTheme from 'material-ui/styles/getMuiTheme';
import MuiThemeProvider from 'material-ui/styles/MuiThemeProvider';
import AppBar from 'material-ui/AppBar';

const App = () => (
  <MuiThemeProvider muiTheme={getMuiTheme()}>
    <AppBar title="Hello, Material-UI!" />
  </MuiThemeProvider>
);

let app = document.createElement('div');
ReactDOM.render(<App />, app);
document.body.appendChild(app);

然后运行构建脚本:

$ npm run build

输出了:

Hash: bc7d93c87854ed7f539e
Version: webpack 1.13.0
Time: 11389ms
    Asset     Size  Chunks             Chunk Names
bundle.js  1.12 MB       0  [emitted]  main
    + 301 hidden modules

可以看到,这个Webpack构建一次还是相当花费时间的,bundle.js也不小。

对于Web应用来说,一开始就加载一个MB级别的资源不是一件好事。最好将bundle.js进一步压缩,并发布到CDN上加速。最好再写一个轻量的加载动画来提升用户体验。

现在可以看到目录下有了一个dist/bundle.js

运行

打开index.html

运行效果

成功!如此我们就生成了一个HTML入口以及一个浏览器可以运行的前端JS文件。理论上来说可以配合任何的Web应用的后端进行开发。无论是使用PHP,Java Servlet、NodeJS(Express等)、Python、Ruby……都没有问题。

甚至可以部署到github.io上。

版权声明:CopyRight 2016, Heley Chen, Follow CC BY-NC-SA License https://blog.csdn.net/zccz14/article/details/51421324

ES6/7 + Babel 编译器

ES6/7 + Babel 编辑器
  • 2017年03月24日 15:40

React升级后带来的两个小问题及处理

一 :MuiThemeProvider升级到react@15.2.1 后,按照往常操作,出现了报错: Failed Context Types: Required context muiTheme...
  • Beijiyang999
  • Beijiyang999
  • 2016-07-09 17:37:10
  • 1479

ReactJS学习-使用webpack构建工程,使用materialUI构建前端,与hprose后端通讯

实现目标:Material-UI 是一套用React写成的,符合Google Material Design 的UI组件库。http://www.material-ui.com/前端通过Materia...
  • keyunq
  • keyunq
  • 2016-06-08 14:53:35
  • 2225

React实战-一个非常棒的React与Material风格相结合的UI控件库(Material-UI)

React实战-一个非常棒的React与Material风格相结合的UI控件库(Material-UI) ReactJs提供了JSX、UI更新机制、组件化原则等底层支持,但是正如我们在所有的程序语言...
  • loveu2000000
  • loveu2000000
  • 2016-09-21 22:35:24
  • 5012

react+materialUI完成自己的翻页组件

material是不带翻页工具的,这一点相比较antd还是有一些鸡肋。所以楼主简单封装了一个翻页组件,话不多说。上代码 import React from &quot;react&quot;; imp...
  • qq_35414779
  • qq_35414779
  • 2018-03-27 17:25:17
  • 55

Web Material-UI 详解(一) 环境搭建与Helloword

Web Material-UI 详解 环境搭建与Helloword,今天介绍一款实现Material Design的开源项目Material-UI,它是一组用来实现Google的Material De...
  • yanzhenjie1003
  • yanzhenjie1003
  • 2016-09-07 17:03:26
  • 11109

基于Vue JS, Webpack 以及Material Design的渐进式web应用 [Part 1]

基于Vue JS, Webpack 以及Material Design的渐进式web应用 [Part 1]原文:基于Vue JS, Webpack 以及Material Design的渐进式web应用...
  • neal1991
  • neal1991
  • 2017-05-11 09:28:40
  • 1463

Material-UI 部署到 GitHub Pages 的实例

纯前端的网页是可以直接部署到 GitHub Pages上的。下面展示一个Material-UI部署到GitHub Pages上的实例。 至于如何配置Material-UI,请参考Material-...
  • zccz14
  • zccz14
  • 2016-06-03 06:14:38
  • 887

webpack+ES6+react搭建简单开发环境

一直想要搭一个简单的react开发环境,看了很多文章还是一头雾水,但最后还是搭了一个算是能正常工作的开发环境吧,记录一下,以防以后忘记。一些必备的安装就不说了,其实主要是package.json和we...
  • xu_dragon
  • xu_dragon
  • 2016-11-11 23:03:30
  • 1383

Material UI之Table Checkbox问题

enableSelectAll : [boolean],默认true,启用全选, table props displaySelectAll: [boolean],默认true,全选按钮显示,tabl...
  • jianleking
  • jianleking
  • 2017-09-05 17:53:26
  • 480
收藏助手
不良信息举报
您举报文章:Material-UI + React + Babel + Webpack 环境配置
举报原因:
原因补充:

(最多只允许输入30个字)