当前位置: 首页 > 后端技术 > Node.js

学习create-react-app

时间:2023-04-03 22:47:49 Node.js

版本说明:2.0.4首先看文档中的使用方法:这里的两个命令是等价的,以npminit...为例看看命令的使用方法那也就是说,npminit会调用已知的npmpackagecreate-,并会在这个create-中执行package.json中定义的bin;所以这里调用的是packagecreate-react-appbin字段;这里bin的功能还是要看官方文档,也就是说如果是全局安装,会把myapp加入环境变量,和cli.js连接;如果安装在项目中,则将其放在node_modules/.bin/中,(这里的node_modules/.bin/是放置所有可执行文件的地方),本地调用仍然会执行cli.js文件。所以再看看./index.js文件。这里没有纹理,而且很占空间。有兴趣的可以自己看看create-react-app/index.js。其实这个文件只是为了node的版本控制,保证不低于8.0;文件末尾,一定要看一下createReactApp文件,这个6,900+行,还是放链接createReactApp.js,下面是部分源码letprojectName;constprogram=newcommander.Command(packageJson.name).version(packageJson.version).arguments('').usage(`${chalk.green('')}[options]`).action(name=>{projectName=name;}).option('--verbose','打印附加日志').option('--info','打印环境调试信息').option('--scripts-version','使用非标准版本的react-scripts').option('--use-npm').option('--use-pnp').option('--typescript').allowUnknownOption().on('--help',()=>{console.log(`仅${chalk.green('')}是必需的。`);console.log();console.log(`自定义${chalk.cyan('--scripts-version')}可以是以下之一:`);console.log(`-特定的npm版本:${chalk.绿色('0.8.2')}`);console.log(`-一个特定的npm标签:${chalk.green('@next')}`);console.log(`-在npm上发布的自定义分支:${chalk.green('my-react-scripts')}`);console.log(`-相对于当前工作目录的本地路径:${chalk.green('file:../my-react-scripts')}`);console.log(`-一个.tgz存档:${chalk.green('https://mysite.com/my-react-scripts-0.8.2.tgz')}`);console.log(`-一个.tar.gz存档:${chalk.green('https://mysite.com/my-react-scripts-0.8.2.tar.gz')}`);console.log(`除非你特别想使用fork,否则不需要它。`);控制台日志();console.log(`如果您有任何问题,请随时提出问题:`);console.log(`${chalk.cyan('https://github.com/facebook/create-react-app/issues/new')}`);控制台日志();}).parse(process.argv);这里使用神器commander.js,它是一个帮助快速开发Nodejs命令行工具的packagecommander.js。commander.js的常见用法是用package.json中的bin发布自己的npm包。看了看createReactApp.js是一个帮助建立项目文件夹的函数,在package.json里面写了一些语句。最重要的是安装包的过程。从下面的代码我们可以知道react,react-dom,react-scripts是默认给我们安装的(使用ts,必须安装几个依赖包)//functionrun()constpackageToInstall=getInstallPackage(version,原始目录);constallDependencies=['react','react-dom',packageToInstall];如果(useTypescript){allDependencies.push('@types/react','@types/react-dom','@types/jest','typescript');}/*下面的函数是获取react-scripts应该安装的版本号*/functiongetInstallPackage(version,originalDirectory){letpackageToInstall='react-scripts';constvalidSemver=semver.valid(version);如果(validSemver){packageToInstall+=`@${validSemver}`;}elseif(version){if(version[0]==='@'&&version.indexOf('/')===-1){packageToInstall+=version;}elseif(version.match(/^file:/)){packageToInstall=`file:${path.resolve(originalDirectory,version.match(/^file:(.*)?$/)[1])}`;}else{//对于tar.gz或替代路径packageToInstall=版本;}}returnpackageToInstall;}未完待续...如有不妥请赐教,请轻喷,鞠躬

最新推荐
猜你喜欢