部署React+webpack工程的步驟

来源:http://www.cnblogs.com/leepyng/archive/2016/12/06/6136889.html
-Advertisement-
Play Games

# 部署React+webpack工程的步驟ps:以Mac os系統做開發環境。因為npm現在使用灰常的慢,所以我使用淘寶境像cnpm。 1,準備工作: 先確保存已經安裝了node.js; 2,文件部署: (1),在終端中找到react-build項目的目錄,鍵入cnpm init初始化一個pack ...


# 部署React+webpack工程的步驟
ps:以Mac os系統做開發環境。因為npm現在使用灰常的慢,所以我使用淘寶境像cnpm。

1,準備工作:
先確保存已經安裝了node.js;

2,文件部署:
(1),在終端中找到react-build項目的目錄,鍵入cnpm init初始化一個package.json文件,該文件是存放接下來項目用的一些模塊,
在終端中根據提交一步步的輸入,或者可以直接新建一個package.json文件,文件內容大概如下:

{
"name": "yes",
"version": "1.0.0",
"description": "react-build",
"main": "index.js",
"scripts": {
"test": "no"
},
"author": "Chen Leepyng",
"license": "UNLICENSED",
"dependencies": {
"react": "^15.3.1",
"react-dom": "^15.3.1",
"react-mobile-picker": "^0.1.10",
"react-slick": "^0.13.1"
},
"devDependencies" {
"babel-core": "^6.13.2",
"babel-loader": "^6.2.8",
"babel-preset-react": "^6.11.1",
"css-loader": "^0.23.1",
"es6-promise": "^3.2.1",
"esformatter-jsx": "^7.4.0",
"eslint": "^3.11.1",
"eslint-config-airbnb": "^13.0.0",
"eslint-plugin-import": "^2.2.0",
"eslint-plugin-jsx-a11y": "^3.0.1",
"eslint-plugin-react": "^6.7.1",
"file-loader": "^0.8.5",
"html-webpack-plugin": "^2.24.1",
"iscroll": "^5.2.0",
"iscroll-component": "^2.0.2",
"react": "^15.0.2",
"react-addons-linked-state-mixin": "^15.1.0",
"react-document-title": "^2.0.2",
"react-dom": "^15.0.2",
"react-iscroll": "^1.0.2",
"react-router": "^2.4.0",
"react-weui": "^0.4.0",
"style-loader": "^0.13.1",
"url-loader": "^0.5.7",
"webpack": "^1.13.3",
"webpack-dev-server": "^1.15.1",
"webpack-encoding-plugin": "^0.0.2",
"webpack-livereload-plugin": "^0.8.2",
"weui": "^0.4.2",
"whatwg-fetch": "^1.0.0"
}
}

保存package.json文件。其中“dependencies”是包發佈後正常執行時所需要的,“devDependencies”里的依賴只有在開發時候才需要

(2) 新建完package.json文件後,在終端輸入:cnpm install --save-dev完成依賴的安裝。
(3)此時可以看到,項目所需要的依賴已經完成安裝,(ps:因為這個依賴用的是我現在開發的版本,所以可以手動去更新你想要的新版本)
(4) 在react-build項目根目錄中新建一個webpack.config.js,內容如下:

var path = require('path');
var webpack = require('webpack');
var LiveReloadPlugin = require('webpack-livereload-plugin');
var HtmlWebpackPlugin = require('html-webpack-plugin');
var EncodingPlugin = require('webpack-encoding-plugin');

module.exports = {
//插件項
plugins: [
// 移除打包後的警告
new webpack.DefinePlugin({
"process.env": {
NODE_ENV: JSON.stringify("production")
}
}),
new LiveReloadPlugin({
'port': 35729,
'appendScriptTag': false,
'ignore': null
}),
new HtmlWebpackPlugin({
inject: true,
hash: true,
cache: true,
filename: '../index.html',
template: 'index.html.tpl'
}),
new EncodingPlugin('UTF-8')
],
//頁面入口文件配置
entry: {
'main': path.resolve(__dirname, './src/main.js'),
},
//入口文件輸出配置
output: {
path: path.resolve(__dirname, 'dist/'),
filename: '[name].js',
},
// 監聽文件變化
watch: true,
module: {
//載入器配置
loaders: [{
test: /\.jsx?$/, // 用正則來匹配文件路徑,這段意思是匹配 js 或者 jsx
loader: 'babel-loader', // 載入模塊 "babel" 是 "babel-loader" 的縮寫
exclude: /node_modules/,
query: {
presets: ['react']
}
}, {
test: /\.css$/,
loader: "style-loader!css-loader"
}, {
test: /\.jpg$/,
loader: "file-loader"
}, {
test: /\.png$/,
loader: "url-loader?mimetype=image/png"
}]
}
};

文件中已經寫好了一些常用的配置,webpack watch的好處就是編輯文件過程中,保存文件的時候會實時編譯並打包文件,併在出錯的時候報錯(關於webpack的使用可以找些相關的資料)

(5)完成上述後,在目錄src中新建main.js文件,main.js文件在這裡將作為一個路由,實現單頁面應用的真諦;內容大概如下

'use strict';

require('./../node_modules/weui/dist/style/weui.min.css');

var React = require('react');
var ReactDOM = require('react-dom');
var ReactRouter = require('react-router');


var Router = ReactRouter.Router;
var Route = ReactRouter.Route;
var Link = ReactRouter.Link;
var history = ReactRouter.hashHistory;


var Home = require('./index.js');//此次寫的一些頁面的路徑,對應<Route path="login" component={Home}/>,當在瀏覽器中輸入'xxx/login'後可以訪問到home下的內容。具體請實踐中實現咔咔;

var index = React.createClass({
render: function() {
return (
<div>
{this.props.children}
<Home/>
</div>
);
}
})

var msg = React.createClass({
alert: function() {
alert(1)
},
render: function() {
return (
<a onClick={this.alert}>msg</a>
)
}
})

// 主頁
var AppContent = React.createClass({
render: function() {
return (
<div>
{this.props.children}
</div>
)
}
})
var mainCom = ReactDOM.render(
<Router history={history} component={AppContent}>
<Route path="/" component={index}>
<Route path="msg" component={msg} />
</Route>
<Route path="home" component={Home}/>


</Router>,
document.getElementById('app')
);

有一些頁面需要傳參數;只需要這樣寫就可以<Route path="login/:params" component={Home}/>
(6)在react-build項目根目錄中新建一個index.html,內容如下:

<!DOCTYPE html>
<html lang="en">

<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1,user-scalable=0">
<meta name="format-detection" content="telephone=no">
<title>react-bulid </title>
</head>

<body id="body">
<div id="app" class="container"></div>

<script type="text/javascript" src="dist/main.js?723919e7acb25944e198"></script></body>

</html>

同時新建一個index.html.tpl文件。
內空為:

<!DOCTYPE html>
<html lang="en">

<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1,user-scalable=0">
<meta name="format-detection" content="telephone=no">
<title>react-build</title>
</head>

<body id="body">
<div id="app" class="container"></div>

</html>

 

完成並保存文件。
(7)此時文件已經基本部署完成。在終端鍵入webpack打包這個項目,會看到有一個dist文件生成,裡面有一個main.js文件,此文件就是整個項目的精髓了,項目所有的功能都整合在一個文件中。(ps:此中帶來的問題就是樣式會被統一,因此,在寫樣式的時候,註意不能同名出現)


3,上瀏覽器測試:
在瀏覽器中直接打開index.html,理論上出的Hello world表示你已經部署成功。
在src目錄中添加:page1.js作路由測試。
併在manin.js添加

var page1 = require('./page1.js');

和:

<Route path="page1" component={Page1}/>

在剛剛打開的瀏覽地址欄中#/後輸入page1,xx/#/page1,
就可以看到新添加的頁面了。

4.以上就是整修項目的部署了。^_^ 

 文件地址:https://github.com/leepyng/react-build


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

-Advertisement-
Play Games
更多相關文章
  • XML文件的約束:什麼叫約束呢?顧名思義,就是對xml文件的內容進行按照既定規則的限制。我們知道,因為xml文件的標簽是可以自定義的,而往往我們用xml文件都是為了表達一定的數據集合(即小型的資料庫),而眾所周知的,資料庫也是分類型的,如學生資料庫,就包含了一系列的諸如name,age,studen ...
  • 1.級聯select的操作,後一個select的值隨著前一個select選中值變化 2.獲取select選中項value值 3.獲取select選中項的文本text 4.設置select選中對應value值項、對應text文本項 ...
  • 續上一篇文章:vue2.0 開發實踐總結之入門篇 ,如果沒有看過的可以移步看一下。 本篇文章目錄如下: 1. vue 組件的說明和使用 2. vuex在實際開發中的使用 3. 開發實踐總結 1. vue 組件的說明和使用 一個組件實質上是一個擁有預定義選項的一個 Vue 實例 在header組件內部 ...
  • 個人開發包的目錄結構 開發步驟 註冊 "npmjs" 命令行添加user 註冊成功後,在命令行執行 依次填完回車。 whoami 上面的填寫完後,命令行輸入 說明成功了。 npm publish 最後發佈至npmjs上 出現下麵類似的版本號就成功了 index.js的編寫 安裝&使用 可能遇到的問題 ...
  • 一、盒子模型(Box Model) 盒子模型也有人稱為框模型,HTML中的多數元素都會在瀏覽器中生成一個矩形的區域,每個區域包含四個組成部分,從外向內依次是:外邊距(Margin)、邊框(Border)、內邊距(Padding)和內容(Content),其實盒子模型有兩種,分別是 ie 盒子模型和標 ...
  • 第三章 DOM Scripting dom 文檔對象模型 類似的還有 bom 瀏覽器對象模型 。 要使用一個 對象首先要知道該對象存在的位置,比如 document 對象 它並不是被定義在 ECMAScript 中而是 dom 中。所以 本來你每次訪問 document就很慢。 引用: 文檔對象模型 ...
  • 瞭解移動web viewport的知識,主要是為了切圖時心中有數。本文主要圍繞一個問題:切圖時怎樣設置<meta name="viewport">相關參數?圍繞這個問題對viewport展開講解。 一、viewport【此處的viewport即layout viewport】概念 移動設備的view ...
  • var t='VARCHAR(5)' var pattern=/VARCHAR\(\d+\)/g pattern.test(t)//true test()返回false true 但是有哪位小伙伴能告訴我這個d是什麼意思嗎? 感謝感謝 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...