React+gulp+browserify模塊化開發

来源:http://www.cnblogs.com/chinajins/archive/2016/06/17/5594745.html
-Advertisement-
Play Games

閱讀本文需要有React的基礎知識,可以在React 入門實例教程和React中文官網進行基礎學習。 沒有React基礎也可以學習本文,本文主要不是學習React,而是gulp+browserify進行模塊化開發。 1.創建項目和環境搭建 我們可以先創建一個文件夾叫react_item,作為項目的根 ...


  閱讀本文需要有React的基礎知識,可以在React 入門實例教程React中文官網進行基礎學習。

  沒有React基礎也可以學習本文,本文主要不是學習React,而是gulp+browserify進行模塊化開發。

1.創建項目和環境搭建

  我們可以先創建一個文件夾叫react_item,作為項目的根目錄。

  打開命令行,cd到項目的根目錄下,我們需要通過npm安裝gulp,輸入:

npm install gulp -g--save-dev

  Tip:沒有安裝node.js的朋友可以進入node.js中文網下載

  gulp是前端項目的自動化構建工具,可以讓我們方便的管理自己的項目,節約了我們大量的時間,詳情見gulp中文網

  接下來還需要安裝browserify,和上面一樣,通過npm去安裝:

npm install browserify --save-dev

  因為項目使用React進行開發,需要要安裝react.js和react-dom.js。正常情況下我們不會把JS文件放在瀏覽器端用browser.js去編譯,所以需要在本地安裝reactify插件,把JSX編譯成JS。我們還需要一個插件,用來把我們得到的代碼轉換成文件流,生成JS文件,這裡使用vinyl-source-stream插件。

  附上安裝以上文件的代碼:

npm install react --save-dev
npm install react-dom --save-dev
npm install reactify --save-dev
npm install vinyl-source-stream --save-dev

  到此為止,我們項目的環境算了搭建完成了!

2.項目的部署

  先附上項目根目錄的結構圖:

  

  我們要生成一個npm的初始化文件,以便於項目的管理,cd到項目根目錄,輸入:

npm init

 需要輸入項目名稱,項目版本號...(隨便輸入,無所謂)

  輸入完,你就會發現在你項目下會自動生成一個package.json文件,打開可以發現,裡面是npm對於項目的一些基本配置。

  接下來,我們打開app文件夾,在app文件夾下新建兩個JS文件,分別為:layout.js和list.js,分別加入以下內容:

layout.js

var React = require('react');
var ReactDOM = require("react-dom");
var List = require("./list.js");
var Layout = React.createClass ({
    render:function(){
        return (
            <div>
                this is Layout
                <List/>
            </div>
        )
    }
})

ReactDOM.render(<Layout/>,document.body);

 list.js

var React = require('react');
var List = React.createClass ({
    render:function(){
        return (
            <div>
                this is List
            </div>
        )
    }
})
module.exports=List;

  經常使用node.js的朋友應該很熟悉裡面的require和module.exports語句,require是用來請求一個文件或模塊,module.exports是給當前模塊設置一個對外介面,這樣,其他的文件就能夠通過這個介面直接require請求到這個模塊了。

  分析一下上面的代碼,首先,我們在layout.js中請求了react和react-dom,和node.js一樣,這裡可以不用加.js尾碼。還請求了list.js這個文件,因為下麵我們要把list.js中的List組件插入到Layout組件中。

  在list.js中,我們只引入了react,因為List組件不負責渲染的工作,它只需要生成虛擬DOM,並插入到Layout組件中,最後,把List組件設置成對外介面。

  因為layout.js需要把元素插入到body內,我們需要在build文件夾內新建一個index.html,內容如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>React+gulp+borwserify</title>
</head>
<body>
    <script src="app/app.js"></script>
</body>
</html>

  這裡引入了一個app.js的文件,我們會把最終的代碼放到app.js中,請跟著我耐心往下看。

  做完了這些,大家可能會想,我們是在寫項目中的JS啊,並不是在寫Sea.js之類的JS管理依賴文件,這些require和module.exports由誰去編譯呢?

  好的,下麵我們就開始配置browserify了!

 3.browserify的配置

  我們在根目錄下創建一個gulp的配置文件:

// gulp只負責文件執行功能
var gulp = require('gulp');
//browserify負責各個模塊的依賴關係
var browserify = require('browserify');
//reactify 責把JSX內容轉換成瀏覽器可以識別的JS內容
var reactify = require('reactify');
//vinyl-source-stream是一個文件流的處理插件
var source = require('vinyl-source-stream');
//執行gulp命令
gulp.task('merge',function(){
    return browserify('build/layout.js')
    //這裡是browserify需要管理的文件,因為layout.js依賴list.js
    //所以browserify會自動引入list.js
    .transform(reactify)//browserify下的轉換功能,我們把reactify傳入,表示把JSX轉換成JS
    .bundle()//把所有JS代碼合併成一個文件,包括react等依賴的文件,這裡返回的是一個字元串
    .pipe(source('app.js'))//轉換成文件流
    .pipe(gulp.dest('app'))//插入到這個目錄下
});

  上面的註釋把每一步操作都做瞭解釋,可能大家覺得很複雜,但是其實實際項目的開發中,只需要配置一次,你只需要把這段代碼copy過去,按照你的項目路徑修改一下就行了。

  接下來就cd到根目錄,運行gulp,在需要在命令行輸入:

gulp merge

   等待幾秒鐘,執行完畢後進入app目錄下,你會看到一個app.js的文件,這個文件里集成了layout.js運行所依賴的組件和模塊的所有代碼

  現在,只要運行index.html,如果你看到如下頁面,那說明成功了!

  

4.總結

  直接在項目JS文件中使用require和module.exports命令,是不是很爽啊,這樣就不用再一個個的引入文件了,而且還自動編譯了JSX。

  gulp+browserify並不是專門供React使用的,所有項目都可以使用它,相比較Sea.js和Require.js,它的優勢在於,能在引入模塊和文件的過程中做一些事。

  不過真正的React項目開發,還是使用webpack去管理項目比較好,畢竟這是FB專門為React量身定製的,下次有時間再寫個webpack+react的簡單項目實例吧。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • /**寶寶我英語不好,後面註釋拼音 請見諒**/ 1.Linux 開源的操作系統,在伺服器端用戶數量非常大,很多伺服器都是使用Linux系統運行的。 相對windows系統來說具有非常完善的用戶許可權系統,安全繫數非常高 2.Cygwin (cwin) 在windows平臺模擬Linux環境 3.Ap ...
  • 在讀這個模式,頭腦里就浮想兩個問題: 1. JavaScript的原型模式與普遍的原型模式有什麼區別? 2. JavaScript的原型模式與prototype有什麼關係? 原型模式定義 原型模式(創建型設計模式)是用一個對象做模板,克隆出新對象。 另外原型模式中的克隆分為"淺克隆"和"深克隆": ...
  • 在公司ERP項目開發中,遇到批量數據插入或者更新,因為每次連接資料庫比較耗時,所以決定改為批量操作,提升效率。庫存檔點導入時,需要大量數據批量操作。 1:資料庫連接代碼中必須開啟批量操作。加上這句,&allowMultiQueries=true,完整的如下: jdbc:mysql://localho ...
  • 寫了關於Hadoop的Map側join 和Reduce的join,今天我們就來在看另外一種比較中立的Join。 SemiJoin,一般稱為半鏈接,其原理是在Map側過濾掉了一些不需要join的數據,從而大大減少了reduce的shffule時間,因為我們知道,如果僅僅使用Reduce側連接,那麼如果 ...
  • 最近在開發過程中,遇到了一個場景,甚是棘手,在這裡分享一下。希望大家腦洞大開一起來想一下解決思路。鄙人也想了一個方案拿出來和大家一起探討一下是否合理。 一、簡單介紹一下涉及的對象概念 工作單元:維護變化的對象列表,在整塊業務邏輯處理完全之後一次性寫入到資料庫中。 領域事件:領域對象本身發生某些變化時 ...
  • jsp主要就是用之前的jsonArray讀取 ajax可以設置個定時器,然後設置的方法,至於方法是今天學習到的 function ajax(method,data,url,success){ var xhr=null; try{ xhr=new XMLHttpRequest("Microsoft.X ...
  • 背景:angular與jquery類庫的協作 第三方類庫中,不得不提的是大名鼎鼎的jquery,現在基本上已經是國內web開發的必修工具了。它靈活的dom操作,讓很多web開發人員欲罷不能。再加上已經很成熟的jquery UI 庫和大量jquery 插件,幾乎是一個取之不盡用之不竭的寶庫。然而,它是 ...
  • 十、屬性優先順序 十一、註釋 11.1 <!-- ... --> 同HTML/XML的註釋 11.2 thymeleaf解析器註釋 thymeleaf解析的時候會被註釋,靜態打開時會顯示 單行 <!--/* ... */--> 多行時: <!--/*--> ... ... <!--/*--> 11.3 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...