Compare commits

...
30 Commits
Author SHA1 Message Date
Emin Khateeb 10fac6c22f Update tsconfig.json
reverted wrong react jsx mode
2018-07-03 11:24:48 +02:00
Emin Khateeb 172b32155d Update tsconfig.json
addressed issue (https://github.com/emin93/react-native-template-typescript/issues/17) which caused typescript to fail compilation of a newly created project
2018-07-03 11:24:03 +02:00
Emin Khateeb 2d7334d61e setup can now be done with a single line command 2018-06-14 12:51:19 +02:00
Emin Khateeb caae886d8f setup script is now working dir independent 2018-06-14 12:25:57 +02:00
Emin Khateeb 270f516448 Update setup.js
now also deleting devDependencies.json after the setup
2018-06-14 11:04:23 +02:00
Emin Khateeb 8ed8b19828 fixed delete method 2018-06-14 10:06:43 +02:00
Emin Khateeb c66f735c19 removed deletes of non-existing files 2018-06-14 10:05:17 +02:00
Emin Khateeb b2f6208cb4 minor wording change 2018-06-14 08:36:41 +02:00
Emin Khateeb 3b10c51f74 removed npm version badge 2018-06-13 20:48:01 +02:00
Emin Khateeb 8d885ab3f5 Simplified README.md 2018-06-13 19:35:56 +02:00
Emin Khateeb b937346ac2 Merge pull request #16 from emin93/rn-0.56
RN 0.56 support
2018-06-13 18:44:26 +02:00
Emin Khateeb cd047d58f0 added link to Albert Gao's article 2018-06-13 18:32:35 +02:00
Emin Khateeb 6a8da82688 added demonstration of working breakpoints 2018-06-13 18:16:16 +02:00
Emin Khateeb ac23b8ac83 removed tests directory to be more consistent with the latest rn 2018-06-13 18:04:48 +02:00
Emin Khateeb 987fe89238 removed reference to package manager 2018-06-13 17:52:27 +02:00
Emin Khateeb 5361316879 prepared compatibility with React Native 0.56 2018-06-13 17:33:22 +02:00
Emin Khateeb c11df248ab changed jsx mode to react-native 2018-06-13 17:17:27 +02:00
Emin Khateeb ec3a826edc Update README.md
added new solution for debugging
2018-06-06 17:28:42 +02:00
Emin Khateeb a585faa237 Update tsconfig.json
re-ordered members alphabetically and added module option
2018-06-06 17:09:01 +02:00
Emin Khateeb 919ebb922e Update setup.js
removed start script config parameter as it seems to work just fine without
2018-06-06 17:05:20 +02:00
Emin Khateeb 57233a492b fixed issue with new deployment 2018-04-24 21:25:57 +02:00
Emin Khateeb b8f4b89aca now caching node modules 2018-04-24 21:18:36 +02:00
Emin Khateeb 80e970bda8 added standardjs to lint the setup.js and now using consistently 2 spaces indent 2018-04-24 21:14:46 +02:00
Emin Khateeb dc432eea2d Update App.tsx
removed unnecessary semicolon
2018-04-20 11:34:35 +02:00
Emin Khateeb 8c5248b2b3 Merge pull request #15 from emin93/emin93-patch-1
Update README.md
2018-04-10 15:29:42 +02:00
Emin Khateeb 11fa0420ed Update README.md
added link to vs code debugging fix
2018-04-10 15:29:12 +02:00
Emin Khateeb d885abb7ce Merge pull request #14 from emin93/emin93-patch-1
Update App.tsx
2018-04-10 13:12:36 +02:00
Emin Khateeb fbe903ad81 Update App.tsx 2018-04-10 13:09:24 +02:00
Emin Khateeb eff79f6d54 Merge pull request #12 from emin93/emin93-patch-1
Update setup.js
2018-04-10 12:18:34 +02:00
Emin Khateeb d3f6c2e173 Update setup.js
Fixed issue which caused the setup script when trying to delete non-existing files.
2018-04-10 12:17:03 +02:00
11 changed files with 2020 additions and 162 deletions

No files matched your search

+3 -1
View File
@@ -1,7 +1,9 @@
language: node_js
node_js:
- "node"
install: true
cache:
directories:
- "node_modules"
deploy:
on:
tags: true
+12 -21
View File
@@ -4,37 +4,28 @@
*
* Generated with the TypeScript template
* https://github.com/emin93/react-native-template-typescript
*
* @format
*/
import React from 'react';
import {
Platform,
StyleSheet,
Text,
View
} from 'react-native';
import React, {Component} from 'react';
import {Platform, StyleSheet, Text, View} from 'react-native';
const instructions = Platform.select({
ios: 'Press Cmd+R to reload,\n' +
'Cmd+D or shake for dev menu',
android: 'Double tap R on your keyboard to reload,\n' +
ios: 'Press Cmd+R to reload,\n' + 'Cmd+D or shake for dev menu',
android:
'Double tap R on your keyboard to reload,\n' +
'Shake or press menu button for dev menu',
});
interface Props {};
export default class App extends React.Component<Props> {
interface Props {}
export default class App extends Component<Props> {
render() {
return (
<View style={styles.container}>
<Text style={styles.welcome}>
Welcome to React Native!
</Text>
<Text style={styles.instructions}>
To get started, edit App.tsx
</Text>
<Text style={styles.instructions}>
{instructions}
</Text>
<Text style={styles.welcome}>Welcome to React Native!</Text>
<Text style={styles.instructions}>To get started, edit App.tsx</Text>
<Text style={styles.instructions}>{instructions}</Text>
</View>
);
}
+21 -22
View File
@@ -1,51 +1,50 @@
# :space_invader: React Native Template TypeScript · [![npm](https://img.shields.io/npm/v/react-native-template-typescript.svg)](https://www.npmjs.com/package/react-native-template-typescript) [![Travis](https://img.shields.io/travis/emin93/react-native-template-typescript.svg)](https://travis-ci.org/emin93/react-native-template-typescript)
# :space_invader: React Native Template TypeScript · [![Build Status](https://travis-ci.org/emin93/react-native-template-typescript.svg?branch=master)](https://travis-ci.org/emin93/react-native-template-typescript)
Clean and minimalist React Native template for a quick start with TypeScript.
[![Header](https://cdn-images-1.medium.com/max/500/1*E9RnPOATuhjuNrlFkv5oSg.jpeg)](https://medium.com/@emin93/react-native-typescript-b965059109d3)
This template can be used with the React Native CLI, which means it doesn't mess with the platform specific files. Instead of including a lot of dependencies, my aim when creating this template was to provide a very easy and minimalist way to start your React Native project with TypeScript. Of course you can always include other dependencies as you need them.
## :star: Features
- Seamless integration with the React Native CLI! :sparkles:
- Consistent with the default React Native template (no additional stuff)
- React Native TypeScript transformer directly integrated into the packager (no separate process for `tsc`)
- Unit testing in TypeScript with TS Jest
- Always latest dependencies :raised_hands:
- Seamlessly integrated into the React Native CLI! :sparkles:
- Consistent with the default React Native template
- React Native TypeScript Transformer included
- Unit testing in TypeScript with TS Jest
- Always latest dependencies :raised_hands:
## :arrow_forward: Quick Start
```
react-native init MyApp --template typescript
cd MyApp
node setup.js
```bash
react-native init MyApp --template typescript && node MyApp/setup.js
```
## :question: FAQ
### What is included in this template?
### What's included in this template?
- [TypeScript](https://github.com/Microsoft/TypeScript)
- [React Native TypeScript transformer](https://github.com/ds300/react-native-typescript-transformer)
- [Type definitions for React & React Native](https://github.com/DefinitelyTyped/DefinitelyTyped)
- [TS Jest](https://github.com/kulshekhar/ts-jest)
- [TypeScript](https://github.com/Microsoft/TypeScript)
- [React Native TypeScript Transformer](https://github.com/ds300/react-native-typescript-transformer)
- [Type definitions for React & React Native](https://github.com/DefinitelyTyped/DefinitelyTyped)
- [TS Jest](https://github.com/kulshekhar/ts-jest)
This template always uses the latest versions of the dependencies at the time when the setup script (`node setup.js`) is being executed. This means you don't have to worry about old versions.
This template always uses the latest versions of the dependencies at the time when the `react-native init` command is being executed. This means you don't have to worry about old versions.
Lots of :heart: and credits to the owners and maintainers of those packages.
### Why the setup script?
The React Native CLI supports automatic installation of production dependencies only. Since TypeScript and the other dependencies are dev dependencies, the setup script is being used to install those. It also takes care of obsolete files like the `.flowconfig` and the `setup.js` itself after the setup.
It deletes obsolete files like the `.flowconfig` and the `setup.js` itself after the setup.
### How will this template affect the React Native CLI workflow?
### Does debugging work?
The React Native CLI will do everything just as without a template and afterwards overwrite the files with the ones from this template. This means you don't have to worry about incompatibility issues with later React Native upgrades.
Yes it does.
[![Demonstration of working breakpoints in Visual Studio Code](https://cdn-images-1.medium.com/max/1600/1*ZXfzgq1xKz1B3chYy9xE7w.png)](https://medium.com/@emin93/react-native-typescript-b965059109d3)
## :globe_with_meridians: Links
- ["Using React Native with TypeScript just became simple" on Medium](https://medium.com/@emin93/react-native-typescript-b965059109d3)
- ["Using React Native with TypeScript just became simple" on Medium](https://medium.com/@emin93/react-native-typescript-b965059109d3)
- ["24 tips for React Native you probably want to know" on Albert Gao's blog](http://albertgao.xyz/2018/05/30/24-tips-for-react-native-you-probably-want-to-know/#9-For-Typescript)
## :computer: Contributing
-12
View File
@@ -1,12 +0,0 @@
import 'react-native';
import React from 'react';
import App from '../App';
// Note: test renderer must be required after react-native.
import renderer from 'react-test-renderer';
it('renders correctly', () => {
const tree = renderer.create(
<App />
);
});
+9 -9
View File
@@ -1,9 +1,9 @@
[
"@types/jest",
"@types/react",
"@types/react-native",
"@types/react-test-renderer",
"react-native-typescript-transformer",
"ts-jest",
"typescript"
]
{
"@types/jest": "latest",
"@types/react-native": "latest",
"@types/react-test-renderer": "latest",
"@types/react": "latest",
"react-native-typescript-transformer": "latest",
"ts-jest": "latest",
"typescript": "latest"
}
+13 -13
View File
@@ -1,15 +1,15 @@
{
"transform": {
"^.+\\.tsx?$": "ts-jest"
},
"testRegex": "(/__tests__/.*|(\\.|/)(test|spec))\\.(jsx?|tsx?)$",
"moduleFileExtensions": [
"ts",
"tsx",
"js",
"jsx",
"json",
"node"
],
"modulePaths": ["<rootDir>"]
"transform": {
"^.+\\.tsx?$": "ts-jest"
},
"testRegex": "(/__tests__/.*|(\\.|/)(test|spec))\\.(jsx?|tsx?)$",
"moduleFileExtensions": [
"ts",
"tsx",
"js",
"jsx",
"json",
"node"
],
"modulePaths": ["<rootDir>"]
}
+1899
View File
File diff suppressed because it is too large. Load diff
+27 -23
View File
@@ -1,25 +1,29 @@
{
"name": "react-native-template-typescript",
"version": "0.0.1",
"description": "Clean and minimalist React Native template for a quick start with TypeScript.",
"scripts": {
"prepublishOnly": "npm --no-git-tag-version version from-git"
},
"repository": {
"type": "git",
"url": "git+https://github.com/emin93/react-native-template-typescript.git"
},
"keywords": [
"react-native",
"typescript",
"jest",
"template",
"boilerplate"
],
"author": "Emin Khateeb <emin@emin.ch>",
"license": "MIT",
"bugs": {
"url": "https://github.com/emin93/react-native-template-typescript/issues"
},
"homepage": "https://github.com/emin93/react-native-template-typescript#readme"
"name": "react-native-template-typescript",
"version": "0.0.1",
"description": "Clean and minimalist React Native template for a quick start with TypeScript.",
"scripts": {
"test": "standard setup.js",
"prepublishOnly": "git reset --hard && npm --no-git-tag-version version from-git"
},
"repository": {
"type": "git",
"url": "git+https://github.com/emin93/react-native-template-typescript.git"
},
"keywords": [
"react-native",
"typescript",
"jest",
"template",
"boilerplate"
],
"author": "Emin Khateeb <emin@emin.ch>",
"license": "MIT",
"bugs": {
"url": "https://github.com/emin93/react-native-template-typescript/issues"
},
"homepage": "https://github.com/emin93/react-native-template-typescript#readme",
"devDependencies": {
"standard": "11.0.1"
}
}
+7 -7
View File
@@ -1,8 +1,8 @@
module.exports = {
getTransformModulePath() {
return require.resolve('react-native-typescript-transformer');
},
getSourceExts() {
return ['ts', 'tsx'];
}
}
getTransformModulePath() {
return require.resolve('react-native-typescript-transformer');
},
getSourceExts() {
return ['ts', 'tsx'];
},
};
+17 -42
View File
@@ -1,48 +1,23 @@
const fs = require('fs');
const path = require('path');
const { execSync } = require('child_process');
const fs = require('fs')
const path = require('path')
const packageJson = require('./package.json');
const jestConfig = require('./jest.json');
const devDependencies = require('./devDependencies.json');
const packageJson = require('./package.json')
const jestConfig = require('./jest.json')
const deleteFile = (fileName) => fs.unlinkSync(path.join(process.cwd(), fileName));
const writeFile = (fileName, data) => fs.writeFileSync(path.join(process.cwd(), fileName), data);
const isYarnAvailable = () => {
try {
execSync('yarn --version', { stdio: 'ignore' });
return true;
} catch (exc) {
return false;
}
};
const deleteFile = (fileName) => fs.unlinkSync(path.join(__dirname, fileName))
const writeFile = (fileName, data) => fs.writeFileSync(path.join(__dirname, fileName), data)
const packageManager = isYarnAvailable() ? 'yarn' : 'npm';
const execOptions = { stdio: 'inherit' };
console.log('🔄 Setting up...')
console.log('🔄 Please wait...\n');
packageJson.jest = Object.assign(packageJson.jest, jestConfig)
writeFile('package.json', JSON.stringify(packageJson, null, 2))
packageJson.scripts.start = `${packageJson.scripts.start} --config ../../../../rn-cli.config.js`;
packageJson.jest = Object.assign(packageJson.jest, jestConfig);
writeFile('package.json', JSON.stringify(packageJson, null, 2));
deleteFile('.flowconfig')
deleteFile('App.js')
deleteFile('devDependencies.json')
deleteFile('jest.json')
deleteFile('LICENSE')
deleteFile('README.md')
deleteFile('setup.js')
console.log(`📦 Installing dependencies with ${packageManager}...\n`);
switch (packageManager) {
case 'yarn':
execSync(`yarn add ${devDependencies.join(' ')} --dev --exact`, execOptions);
break;
default:
execSync(`npm i ${devDependencies.join(' ')} --save-dev --save-exact`, execOptions);
}
deleteFile('App.js');
deleteFile('__tests__/App.js');
deleteFile('.flowconfig');
deleteFile('devDependencies.json');
deleteFile('jest.json');
deleteFile('README.md');
deleteFile('LICENSE');
deleteFile('setup.js');
console.log(`\n✅ Setup completed! You can now start with: ${packageManager} start\n`);
console.log(`✅ Setup completed!`)
+12 -12
View File
@@ -1,14 +1,14 @@
{
"compilerOptions": {
"target": "es2015",
"jsx": "react",
"noEmit": true,
"moduleResolution": "node",
"noImplicitAny": true,
"allowSyntheticDefaultImports": true,
"esModuleInterop": true
},
"exclude": [
"node_modules"
]
"compilerOptions": {
"allowSyntheticDefaultImports": true,
"esModuleInterop": true,
"jsx": "react-native",
"lib": ["es6"],
"module": "es6",
"moduleResolution": "node",
"noEmit": true,
"noImplicitAny": true,
"target": "es6"
},
"exclude": ["node_modules"]
}