watchify和browserify

当开始一个React项目的时候,首要的烦人问题就是,编译。彷佛考虑到编译就得去学Grunt脚本,就得去写gulp。虽然会写gulp脚本,但仍然以为这些事情很不必也很耗时,并且这种脚本的特色是难以debug,至关费时。是否稍作配置就能够彻底编译呢?答案是能够的。javascript

首先安装browserify,reactify,而后在packages.json中加上:java

javascript"browserify" : {
    "transform": [
        ["reactify"]
    ]
}

而后写一个文件,如x.js:react

var x = (<div className="hello"></div>);

在命令执行:browserify x.js 便会获得:es6

(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
var x = React.createElement("div", {className: "hello"}, " ")

},{}]},{},[1]);

能够看出来,<div className="hello" ...已经被编译成了React.createElement("div", {className: "hello"}, " ").json

执行browserify x.js -o x.out.js便会将结果输出到x.out.js文件。gulp

但若是我写的是这样呢:ui

javascriptvar H = React.reactClass({
  getData() {
    return [20, 30];
  },
  render() {
    [width, height] = this.getData();
    return (
      <div style={{width: width, height: height, backgroundColor: 'blue'}}>
        <span {...this.props}> hello </span>
      </div>
    );
  }
});

console.log(
  React.renderToString(<H className="xyz" />)
);

上述有es6的语法,正常js引擎是不能正常执行的,那如何让它被正确转换成通用的JS呢?
只须要在reactify的配置中加上{"es6": true}便可。this

javascript"browserify" : {
    "transform": [
        ["reactify", {"es6": true}]
    ]
}

那最后问题来了,如何让文件每次变更都编译呢?
答案是安装watchify。
watchify是一个browserify的封装,其在packages.json中的配置与browserify彻底同样,且无需改变"browserify"字段名。
所以,安装了watchify后,你甚至不用修改browserify已有的配置,直接执行watchify x.js -o x.out.js便可。spa

相关文章
相关标签/搜索