|
1 | 1 | import fs from 'fs-extra';
|
2 | 2 | import spawn from 'cross-spawn';
|
3 | 3 | import path from 'path';
|
| 4 | +import https from 'https'; |
4 | 5 |
|
5 | 6 | const FILES_TO_DELETE = [
|
6 | 7 | '__tests__',
|
@@ -120,16 +121,51 @@ export default async function generateExampleApp({
|
120 | 121 | scripts.pods = 'pod-install --quiet';
|
121 | 122 | }
|
122 | 123 |
|
123 |
| - PACKAGES_TO_REMOVE.forEach((pkg) => { |
| 124 | + PACKAGES_TO_REMOVE.forEach((name) => { |
124 | 125 | // eslint-disable-next-line @typescript-eslint/no-dynamic-delete
|
125 |
| - delete devDependencies[pkg]; |
| 126 | + delete devDependencies[name]; |
126 | 127 | });
|
127 | 128 |
|
128 | 129 | Object.assign(devDependencies, PACKAGES_TO_ADD_DEV);
|
129 | 130 |
|
130 | 131 | if (type === 'expo') {
|
131 |
| - Object.assign(dependencies, PACKAGES_TO_ADD_WEB); |
132 |
| - Object.assign(devDependencies, PACKAGES_TO_ADD_WEB_DEV); |
| 132 | + const sdkVersion = dependencies.expo.split('.')[0].replace(/[^\d]/, ''); |
| 133 | + |
| 134 | + let bundledNativeModules: Record<string, string>; |
| 135 | + |
| 136 | + try { |
| 137 | + bundledNativeModules = await new Promise((resolve, reject) => { |
| 138 | + https |
| 139 | + .get( |
| 140 | + `https://raw.githubusercontent.com/expo/expo/sdk-${sdkVersion}/packages/expo/bundledNativeModules.json`, |
| 141 | + (res) => { |
| 142 | + let data = ''; |
| 143 | + |
| 144 | + res.on('data', (chunk) => (data += chunk)); |
| 145 | + res.on('end', () => { |
| 146 | + try { |
| 147 | + resolve(JSON.parse(data)); |
| 148 | + } catch (e) { |
| 149 | + reject(e); |
| 150 | + } |
| 151 | + }); |
| 152 | + } |
| 153 | + ) |
| 154 | + .on('error', reject); |
| 155 | + }); |
| 156 | + } catch (e) { |
| 157 | + bundledNativeModules = {}; |
| 158 | + } |
| 159 | + |
| 160 | + Object.entries(PACKAGES_TO_ADD_WEB).forEach(([name, version]) => { |
| 161 | + dependencies[name] = bundledNativeModules[name] || version; |
| 162 | + }); |
| 163 | + |
| 164 | + Object.entries(PACKAGES_TO_ADD_WEB_DEV).forEach(([name, version]) => { |
| 165 | + devDependencies[name] = bundledNativeModules[name] || version; |
| 166 | + }); |
| 167 | + |
| 168 | + scripts.web = 'expo start --web'; |
133 | 169 | }
|
134 | 170 |
|
135 | 171 | await fs.writeFile(
|
|
0 commit comments