miaoda-expo-devkit 0.1.1-beta.7 → 0.1.1-beta.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/metro.d.mts +13 -5
- package/dist/metro.d.ts +13 -5
- package/dist/metro.js +19 -2
- package/dist/metro.mjs +19 -2
- package/package.json +1 -1
package/dist/metro.d.mts
CHANGED
|
@@ -192,11 +192,19 @@ declare function withDevStubs(config: MetroConfig): MetroConfig;
|
|
|
192
192
|
* 适用场景:node_modules 位于 projectRoot 的祖先目录(如 /workspace/node_modules),
|
|
193
193
|
* 而 projectRoot 自身的 node_modules 为空目录或不存在。
|
|
194
194
|
*
|
|
195
|
-
* 问题:
|
|
196
|
-
*
|
|
197
|
-
*
|
|
198
|
-
*
|
|
199
|
-
*
|
|
195
|
+
* 问题:
|
|
196
|
+
* 1. Metro 只监听 projectRoot,祖先目录的 node_modules 不在 watchFolders 内,
|
|
197
|
+
* 导致模块无法被 file map 索引。
|
|
198
|
+
* 2. pnpm 的 .pnpm 目录可能是指向外部路径的 symlink
|
|
199
|
+
* (如 /workspace/node_modules/.pnpm → /data/expo/node_modules/.pnpm)。
|
|
200
|
+
* Metro 跟随 symlink 后,将文件以真实路径(/data/expo/...)存入 file map,
|
|
201
|
+
* HTML 入口的 bundle URL 也随之变为 /data/expo/...bundle。
|
|
202
|
+
* 若 /data/expo/node_modules/ 不在 watchFolders,Metro HTTP server 会返回 404。
|
|
203
|
+
*
|
|
204
|
+
* 修复:
|
|
205
|
+
* 1. 将祖先目录的 node_modules 加入 watchFolders 和 resolver.nodeModulesPaths。
|
|
206
|
+
* 2. 若该 node_modules 下的 .pnpm 是指向外部路径的 symlink,
|
|
207
|
+
* 同样将外部真实路径加入 watchFolders 和 resolver.nodeModulesPaths。
|
|
200
208
|
*
|
|
201
209
|
* 用法(metro.config.js):
|
|
202
210
|
* const { withWorkspaceNodeModules } = require('miaoda-expo-devkit/metro');
|
package/dist/metro.d.ts
CHANGED
|
@@ -192,11 +192,19 @@ declare function withDevStubs(config: MetroConfig): MetroConfig;
|
|
|
192
192
|
* 适用场景:node_modules 位于 projectRoot 的祖先目录(如 /workspace/node_modules),
|
|
193
193
|
* 而 projectRoot 自身的 node_modules 为空目录或不存在。
|
|
194
194
|
*
|
|
195
|
-
* 问题:
|
|
196
|
-
*
|
|
197
|
-
*
|
|
198
|
-
*
|
|
199
|
-
*
|
|
195
|
+
* 问题:
|
|
196
|
+
* 1. Metro 只监听 projectRoot,祖先目录的 node_modules 不在 watchFolders 内,
|
|
197
|
+
* 导致模块无法被 file map 索引。
|
|
198
|
+
* 2. pnpm 的 .pnpm 目录可能是指向外部路径的 symlink
|
|
199
|
+
* (如 /workspace/node_modules/.pnpm → /data/expo/node_modules/.pnpm)。
|
|
200
|
+
* Metro 跟随 symlink 后,将文件以真实路径(/data/expo/...)存入 file map,
|
|
201
|
+
* HTML 入口的 bundle URL 也随之变为 /data/expo/...bundle。
|
|
202
|
+
* 若 /data/expo/node_modules/ 不在 watchFolders,Metro HTTP server 会返回 404。
|
|
203
|
+
*
|
|
204
|
+
* 修复:
|
|
205
|
+
* 1. 将祖先目录的 node_modules 加入 watchFolders 和 resolver.nodeModulesPaths。
|
|
206
|
+
* 2. 若该 node_modules 下的 .pnpm 是指向外部路径的 symlink,
|
|
207
|
+
* 同样将外部真实路径加入 watchFolders 和 resolver.nodeModulesPaths。
|
|
200
208
|
*
|
|
201
209
|
* 用法(metro.config.js):
|
|
202
210
|
* const { withWorkspaceNodeModules } = require('miaoda-expo-devkit/metro');
|
package/dist/metro.js
CHANGED
|
@@ -213,16 +213,33 @@ function findAncestorNodeModulesDir(projectRoot) {
|
|
|
213
213
|
}
|
|
214
214
|
return null;
|
|
215
215
|
}
|
|
216
|
+
function resolveExternalPnpmStore(nodeModulesDir) {
|
|
217
|
+
const pnpmDir = import_path5.default.join(nodeModulesDir, ".pnpm");
|
|
218
|
+
try {
|
|
219
|
+
const realPnpmDir = import_fs2.default.realpathSync(pnpmDir);
|
|
220
|
+
const realNmDir = import_path5.default.dirname(realPnpmDir);
|
|
221
|
+
if (realNmDir !== nodeModulesDir) {
|
|
222
|
+
return realNmDir;
|
|
223
|
+
}
|
|
224
|
+
} catch {
|
|
225
|
+
}
|
|
226
|
+
return null;
|
|
227
|
+
}
|
|
216
228
|
function withWorkspaceNodeModules(config) {
|
|
217
229
|
const projectRoot = config.projectRoot ?? process.cwd();
|
|
218
230
|
const found = findAncestorNodeModulesDir(projectRoot);
|
|
219
231
|
if (!found) return config;
|
|
232
|
+
const foldersToAdd = [found];
|
|
233
|
+
const externalStore = resolveExternalPnpmStore(found);
|
|
234
|
+
if (externalStore) {
|
|
235
|
+
foldersToAdd.push(externalStore);
|
|
236
|
+
}
|
|
220
237
|
return {
|
|
221
238
|
...config,
|
|
222
|
-
watchFolders: [...config.watchFolders ?? [],
|
|
239
|
+
watchFolders: [...config.watchFolders ?? [], ...foldersToAdd],
|
|
223
240
|
resolver: {
|
|
224
241
|
...config.resolver,
|
|
225
|
-
nodeModulesPaths: [...config.resolver?.nodeModulesPaths ?? [],
|
|
242
|
+
nodeModulesPaths: [...config.resolver?.nodeModulesPaths ?? [], ...foldersToAdd]
|
|
226
243
|
}
|
|
227
244
|
};
|
|
228
245
|
}
|
package/dist/metro.mjs
CHANGED
|
@@ -177,16 +177,33 @@ function findAncestorNodeModulesDir(projectRoot) {
|
|
|
177
177
|
}
|
|
178
178
|
return null;
|
|
179
179
|
}
|
|
180
|
+
function resolveExternalPnpmStore(nodeModulesDir) {
|
|
181
|
+
const pnpmDir = path5.join(nodeModulesDir, ".pnpm");
|
|
182
|
+
try {
|
|
183
|
+
const realPnpmDir = fs2.realpathSync(pnpmDir);
|
|
184
|
+
const realNmDir = path5.dirname(realPnpmDir);
|
|
185
|
+
if (realNmDir !== nodeModulesDir) {
|
|
186
|
+
return realNmDir;
|
|
187
|
+
}
|
|
188
|
+
} catch {
|
|
189
|
+
}
|
|
190
|
+
return null;
|
|
191
|
+
}
|
|
180
192
|
function withWorkspaceNodeModules(config) {
|
|
181
193
|
const projectRoot = config.projectRoot ?? process.cwd();
|
|
182
194
|
const found = findAncestorNodeModulesDir(projectRoot);
|
|
183
195
|
if (!found) return config;
|
|
196
|
+
const foldersToAdd = [found];
|
|
197
|
+
const externalStore = resolveExternalPnpmStore(found);
|
|
198
|
+
if (externalStore) {
|
|
199
|
+
foldersToAdd.push(externalStore);
|
|
200
|
+
}
|
|
184
201
|
return {
|
|
185
202
|
...config,
|
|
186
|
-
watchFolders: [...config.watchFolders ?? [],
|
|
203
|
+
watchFolders: [...config.watchFolders ?? [], ...foldersToAdd],
|
|
187
204
|
resolver: {
|
|
188
205
|
...config.resolver,
|
|
189
|
-
nodeModulesPaths: [...config.resolver?.nodeModulesPaths ?? [],
|
|
206
|
+
nodeModulesPaths: [...config.resolver?.nodeModulesPaths ?? [], ...foldersToAdd]
|
|
190
207
|
}
|
|
191
208
|
};
|
|
192
209
|
}
|