React Native 项目我们可以通过react-native start启动运行,那它的执行过程是怎样的呢?
先介绍下node_modules全局包运行过程
一:node_modules全局包运行过程(以Windows为例):
1:通过npm config get cache可以获取到全局包的安装路径,一般为:“c:\user\xxx\Application Data\npm\node_modules\“
2:进入任意一个全局包里面,以react-native-cli全局包为例,目录结构如下:
3:打开该目录下的package.json,在script里面可以看到该全局包的运行命令:
该配置主要作用:
a:在执行npm install react-native-cli -g执行全局包安装时,会根据第3点中bin中的配置生成快捷运行命令脚本文件,无后缀的为非windows系统执行的,有后缀的为windwos系统执行的,生成位置在:“c:\user\xxx\Application Data\npm“,脚本执行命令为react-native
b:指定执行命令时运行的文件为index.js
4:在命令行中执行react-native命令时,从脚本文件里代码可以看到是由nodejs加载执行到该脚本的,最终执行到的是“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服务启动过程:
入口文件cli.js:
我们创建一个RN项目,通过react-native start启动项目时,会自启动一个服务,通过日志打印可以发现,服务启动入口文件为 "项目目录\node_modules\react-native\cli.js",可能会存在两种执行过程:
1:若在系统窗口命令行或者有些编辑器命令行里执行启动命令,会通过c:\user\xxx\Application Data\npm\node_modules\react-native-cli\index.js里的run方法执行到 "项目目录\node_modules\react-native\cli.js"
2:在有些编辑器命令行里执行启动命令,会直接执行到 "项目目录\node_modules\react-native\cli.js"