使用 Dawn 构建 React 项目 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
houfeng

使用 Dawn 构建 React 项目

  •  
  •   houfeng 2017 年 9 月 28 日 2420 次点击
    这是一个创建于 3131 天前的主题,其中的信息可能已经有所发展或是发生改变。

    开发一个 React 项目,通常避免不了要去配置 Webpackbabel 之类,以支持 commonjses 模块及各种 es 新语法,及及进行 jsx 语法的转义。当然也可以用 create-react-appp 脚手架快速创建一个 react 项目,但与此同时 create-react-app 常常又显的不太自由。

    在配置 webpack 时,看着上百行的 webpack.config.js 是不是很闹心?为了重用是不是在多个项目间各种 ctrl-c -> ctrl-v,整个配置起来还是稍显麻烦,对于新手用户常常更是一头雾水,事实上,最大化重用和简化构建配置也是 dawn 的目标之一。

    本文是一篇 Dawn 使用入门文章,介绍如何从「零」开始「手动配置」一个基于 dawnreact 工程。

    一、环境准备(可略过)

    # 1. 安装 NVM curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.2/install.sh | bash # 2. 安装 Node nvm install 8.6.0 nvm alias default 8.6.0 # 3. 安装 Dawn npm i dawn -g 

    二、创建项目 & 编写代码

    创建一个普通的 Node 项目

    # 1. 创建项目目录 mkdir react-demo cd react-demo # 2. 初始化 package npm init 

    安装 react & react-dom

    npm i react react-dom --save-dev 

    用你的编辑器,打开项目根目录,比如 vscode

    vscode . 

    在项目根目录创建 src 目录,并在 src 目录中创建 index.js,并输入如下代码

    import React from 'react'; import ReactDOM from 'react-dom'; function App() { return <div> Hello Dawn! </div>; } ReactDOM.render( <App />, document.getElementById('root') ); 

    src/assets 目录,并在 src/assets 目录中创建 index.html,并输入如下代码

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" cOntent="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" cOntent="ie=edge"> <title>Hello Dawn!</title> </head> <body> <div id="root"></div> </body> </html> 

    三、添加构建配置

    在项目根目录创建 .dawn 目录,并在 .dawn 目录中输入如下配置

    build: - name: clean - name: webpack 

    好了,现在构建一下我们的代码吧,执行如下命令

    dn build 

    命令执行完毕,会看到项目根目录多了一个 build 这便是构建结果,简单到想哭吧。

    如上配置,在 buildpipeline 中添加了 cleanwebpack 两个中间件,在每次执行 dn build 时,pipeline 中的 clean 会清理 build 目录,然后 webpack 会接着进行构建,并把构构建结果放入 build 目录。

    等一下,想要监听文件的「实时构建」?想要一个用于开发的 「 Dev Server 」?想要浏览器「自动同步」?

    看下边,配置一下 devpipeline,在刚刚的 pipe.yml 中加入 dev 配置

    build: - name: clean - name: webpack dev: - name: clean - name: webpack watch: true - name: server - name: browser-sync 

    现在我们执行一下如下命令

    dn dev 

    devpipeline 中,我们把 webpackwatch 选项打开了,打开后便能监听文件的变化并进行「实时构建」了,接下来的任务交给 server 中间件,它会在构建启动后启动一个静态的 Web Server,默认情况下会自动选择一个「可用端口」,不出意外「浏览器」已经「自动打开」了。

    image

    编辑一代码试试,browser-sync 中间件会通知浏览器实时自动刷新页面,在适配不同设备开发时 browser-sync 还会在多个的设备的浏览器中同步。

    好了,一个基本的基于 dawn 的 react 工程配置好了。文中提到的 webpackcleanserverbrowser-sync,可以关注一下相关文档。


    附上一些链接:

    (全文完)

    第 1 条附言    2017 年 9 月 28 日

    修正一句: 「在项目根目录创建 .dawn 目录,并在 .dawn 目录中输入如下配置」 应该为 「在项目根目录创建 .dawn 目录,并在 .dawn 目录中创建 pipe.yml,然后输入如下配置」

    目前尚无回复
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2724 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 43ms UTC 06:58 PVG 14:58 LAX 23:58 JFK 02:58
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86