ReactNative工程创建自动化

在VSCode中为React Native开发设置TypeScript, TSLint以及 Prettier这篇文章中,主要解决了如何在RN中配置Typescript以提高编写代码的质量。实际在使用的时候,需要一步步的操作,使用体验着实教人抓狂。

最近在使用Fastlane完成自动化打包的过程中,了解一些脚本化的知识点。也就想尝试能不能把上面反锁的工作,用脚本的方式来实现。

基本思路

  1. 提示用户输入工程名
  2. 创建RN工程
  3. 创建写入相关的配置文件
  4. 使用VSCode打开项目

实现脚本

printf "请输入项目名称\n"
read projectName
react-native init $projectName && cd $projectName
yarn add --dev typescript react-native-typescript-transformer @types/react @types/react-native
yarn tsc --init --pretty --jsx react
yarn add --dev tslint tslint-config-prettier tslint-config-standard tslint-react prettier

touch .prettierrc
cat <<EOF> .prettierrc
"semi": false,
"singleQuote": true,
"trailingComma": "none"
EOF

printf "创建tslint.json文件,并配置文件:\n"
touch tslint.json
cat <<EOF> tslint.json
{
  "defaultSeverity": "error",
  "extends": [
    "tslint:recommended",
    "tslint-config-standard",
    "tslint-react",
    "tslint-config-prettier"
  ],
  "jsRules": {},
  "rules": {
    "ordered-imports": false,
    "object-literal-sort-keys": false,
    "member-ordering": false,
    "jsx-no-lambda": false,
    "jsx-boolean-value": false
  },
  "rulesDirectory": []
}
EOF

printf "创建rn-cli.config.js文件,并配置文件:\n"
touch rn-cli.config.js
cat <<EOF> rn-cli.config.js
module.exports = {
  getTransformModulePath() {
    return require.resolve('react-native-typescript-transformer')
  },
  getSourceExts() {
    return ['ts', 'tsx']
  },
}
EOF

printf "处理tsconfig.json文件:\n"
if [ -e tsconfig.json ] 
    then
        mv tsconfig.json tsconfig_old.json
    else
    printf "" 
fi

touch tsconfig.json
cat <<EOF> tsconfig.json
{
  "compilerOptions": {
    "target": "ES2015" /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019' or 'ESNEXT'. */,
    "module": "commonjs" /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'. */,
    "jsx": "react" /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */,
    "strict": true /* Enable all strict type-checking options. */,
    "noImplicitAny": true /* Raise error on expressions and declarations with an implied 'any' type. */,
    "strictFunctionTypes": true /* Enable strict checking of function types. */,
    "noImplicitThis": true /* Raise error on 'this' expressions with an implied 'any' type. */,
    "alwaysStrict": true /* Parse in strict mode and emit "use strict" for each source file. */,
    "allowSyntheticDefaultImports": true /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */,
    "esModuleInterop": true /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */
  }
}
EOF

printf "App.js 转 App.tsx 文件:\n"
if [ -e App.js ] 
    then
        mv App.js App.tsx
    else
    printf ""
fi

printf "请在VSCode中安装『Prettier Code Formatter』和『TSLint』插件。\n"
printf "请在VSCode的setting.json中配置以下信息:\n"
printf "'editor.formatOnSave': true,\n'javascript.format.enable': false\n\n"

printf "请按回车键,打开自动创建的项目"
read 
code .

使用步骤

  1. 终端cd到需要创建工程的地方;
  2. 创建一个react-native-cli.sh文件,并将上面的脚本拷贝粘贴到该文件中
  3. 使用chown -x react-native-cli.sh将react-native-cli.sh设置为可执行文件
  4. 执行sh react-native-cli.sh命令,等待完成就可以了

心得

学习了iOS和Android开发,能够使用混合开发,比如React Native或者Flutter,才能把优势显示出来。

能够使用脚本"胶水"把React Native项目创建和其它脚本命令糅合在一起,自动化完成Typescript配置,减少了大量重复、反锁技术含量不高的工作,提高了工作效率。

实际的学习中在扩充自己知识面的同时,能够把各个知识点联系在一起成为一个系统,也是很重要的技能。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,287评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,346评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,277评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,132评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,147评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,106评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,019评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,862评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,301评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,521评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,682评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,405评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,996评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,651评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,803评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,674评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,563评论 2 352

推荐阅读更多精彩内容