React Native 項(xiàng)目我們可以通過react-native start啟動運(yùn)行,那它的執(zhí)行過程是怎樣的呢?
先介紹下node_modules全局包運(yùn)行過程
一:node_modules全局包運(yùn)行過程(以Windows為例):
1:通過npm config get cache可以獲取到全局包的安裝路徑,一般為:“c:\user\xxx\Application Data\npm\node_modules\“
2:進(jìn)入任意一個(gè)全局包里面,以react-native-cli全局包為例,目錄結(jié)構(gòu)如下:

3:打開該目錄下的package.json,在script里面可以看到該全局包的運(yùn)行命令:

該配置主要作用:
a:在執(zhí)行npm install react-native-cli -g執(zhí)行全局包安裝時(shí),會根據(jù)第3點(diǎn)中bin中的配置生成快捷運(yùn)行命令腳本文件,無后綴的為非windows系統(tǒng)執(zhí)行的,有后綴的為windwos系統(tǒng)執(zhí)行的,生成位置在:“c:\user\xxx\Application Data\npm“,腳本執(zhí)行命令為react-native
b:指定執(zhí)行命令時(shí)運(yùn)行的文件為index.js

4:在命令行中執(zhí)行react-native命令時(shí),從腳本文件里代碼可以看到是由nodejs加載執(zhí)行到該腳本的,最終執(zhí)行到的是“c:\user\xxx\Application Data\npm\node_modules\react-native-cli\index.js“ 文件
@ECHO off
SETLOCAL
CALL :find_dp0
IF EXIST "%dp0%\node.exe" (
SET "_prog=%dp0%\node.exe"
) ELSE (
SET "_prog=node"
SET PATHEXT=%PATHEXT:;.JS;=;%
)
"%_prog%" "%dp0%\node_modules\react-native-cli\index.js" %*
ENDLOCAL
EXIT /b %errorlevel%
:find_dp0
SET dp0=%~dp0
EXIT /b

二:react-native服務(wù)啟動過程:
入口文件cli.js:
我們創(chuàng)建一個(gè)RN項(xiàng)目,通過react-native start啟動項(xiàng)目時(shí),會自啟動一個(gè)服務(wù),通過日志打印可以發(fā)現(xiàn),服務(wù)啟動入口文件為 "項(xiàng)目目錄\node_modules\react-native\cli.js",可能會存在兩種執(zhí)行過程:
1:若在系統(tǒng)窗口命令行或者有些編輯器命令行里執(zhí)行啟動命令,會通過c:\user\xxx\Application Data\npm\node_modules\react-native-cli\index.js里的run方法執(zhí)行到 "項(xiàng)目目錄\node_modules\react-native\cli.js"
2:在有些編輯器命令行里執(zhí)行啟動命令,會直接執(zhí)行到 "項(xiàng)目目錄\node_modules\react-native\cli.js"