1、npm run的基本了解
npm run实际上是npm run-script的缩写。进入项目目录,在命令行只执行npm run命令时,会输出package.json中scripts对象的值
2、npm run xxx的简化执行步骤
1)、从 package.json 文件中读取 scripts 对象里面的全部配置
2)、以传给 npm run 的第一个参数作为键,本例中为 xxx,在 scripts
3)、对象里面获取对应的值作为接下来要执行的命令,如果没找到直接报错
4)、在系统默认的 shell 中执行上述命令。
3、实际执行流程
指定script之前,会把node_modules/.bin添加到环境变量$path前。举例来说,使用create-react-app创建一个react项目后,运行npm run start,npm会在cmd命令行中运行react-scripts start。其中react-scripts命令是npm在执行脚本前,会把node_modules/.bin加到环境变量$path的前面(打开node_modules/.bin目录,你能找着react-scripts文件,正好对应package.json中script对象的start属性值中的react-scripts命令),执行结束后,再将path复原。这意味着任何内含可执行文件的npm依赖都可以在npm script中直接调用,而不需要在package.json文件的scripts的属性值中加上可执行文件的完整路径,例如 ./node_modules/.bin/react-scripts start.js
4、npm run start详细执行过程(react)
执行npm run start命令后,首先把node_modules/.bin加到环境变量$path的前面,然后去node_modules/.bin目录下寻找对应的执行文件react-scripts,找到之后,执行react-scripts文件中的命令,首先判断电脑中是否安装了nodeJS,如果安装了,直接用node命令运行node_modlues中的react-scripts/bin/react-scripts.js文件,获取命令行,判断执行环境是'start',然后执行node_modules\react-scripts\scripts\start.js。
在react-scripts.js文件,使用console.log(process.argv),输出结果说明命令行是
[
'D:\\Program Files\\nodejs\\node.exe',
'C:\\Users\\hehepeng\\Desktop\\my-demo\\node_modules\\react-scripts\\bin\\react-scripts.js',
'start'
]