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 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
- * 问题:Metro 只监听 projectRoot,不会自动爬取祖先目录的 node_modules,
196
- * 导致 Metro 无法在 file map 中找到依赖的真实路径,bundle 请求返回 404。
197
- *
198
- * 修复:将祖先目录中的 node_modules 加入 watchFolders 和 resolver.nodeModulesPaths,
199
- * 使 Metro 能正确索引并解析其中的模块。
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
- * 问题:Metro 只监听 projectRoot,不会自动爬取祖先目录的 node_modules,
196
- * 导致 Metro 无法在 file map 中找到依赖的真实路径,bundle 请求返回 404。
197
- *
198
- * 修复:将祖先目录中的 node_modules 加入 watchFolders 和 resolver.nodeModulesPaths,
199
- * 使 Metro 能正确索引并解析其中的模块。
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 ?? [], found],
239
+ watchFolders: [...config.watchFolders ?? [], ...foldersToAdd],
223
240
  resolver: {
224
241
  ...config.resolver,
225
- nodeModulesPaths: [...config.resolver?.nodeModulesPaths ?? [], found]
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 ?? [], found],
203
+ watchFolders: [...config.watchFolders ?? [], ...foldersToAdd],
187
204
  resolver: {
188
205
  ...config.resolver,
189
- nodeModulesPaths: [...config.resolver?.nodeModulesPaths ?? [], found]
206
+ nodeModulesPaths: [...config.resolver?.nodeModulesPaths ?? [], ...foldersToAdd]
190
207
  }
191
208
  };
192
209
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "miaoda-expo-devkit",
3
- "version": "0.1.1-beta.7",
3
+ "version": "0.1.1-beta.8",
4
4
  "description": "Expo 应用开发工具集:Sentry DSN 替换 stub、错误/网络捕获、Metro 符号化",
5
5
  "license": "MIT",
6
6
  "main": "./dist/index.js",