aws-sdk-webpack-aliases.js 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. 'use strict'
  2. const fs = require('fs')
  3. const path = require('path')
  4. /**
  5. * Webpack 4 ��ʶ�� package.json �� exports ��·����@aws-sdk v3 ����ʹ�� exports��
  6. * �轫 @aws-sdk/<pkg>/<subpath> ӳ�䵽ʵ�� dist �ļ������� browser ��������
  7. */
  8. function pickExportTarget(exportConfig) {
  9. if (!exportConfig || typeof exportConfig !== 'object') {
  10. return null
  11. }
  12. const browser = exportConfig.browser
  13. if (browser) {
  14. if (typeof browser === 'string') {
  15. return browser
  16. }
  17. return browser.import || browser.require || browser.module
  18. }
  19. return exportConfig.module || exportConfig.import || exportConfig.require || exportConfig.node
  20. }
  21. function buildAwsSdkAliases(projectRoot) {
  22. const aliases = {}
  23. const awsSdkDir = path.join(projectRoot, 'node_modules', '@aws-sdk')
  24. if (!fs.existsSync(awsSdkDir)) {
  25. return aliases
  26. }
  27. for (const pkgName of fs.readdirSync(awsSdkDir)) {
  28. const pkgRoot = path.join(awsSdkDir, pkgName)
  29. const pkgJsonPath = path.join(pkgRoot, 'package.json')
  30. if (!fs.existsSync(pkgJsonPath)) {
  31. continue
  32. }
  33. let pkgJson
  34. try {
  35. pkgJson = require(pkgJsonPath)
  36. } catch (e) {
  37. continue
  38. }
  39. const exportsField = pkgJson.exports
  40. if (!exportsField || typeof exportsField !== 'object') {
  41. continue
  42. }
  43. for (const [subpath, exportConfig] of Object.entries(exportsField)) {
  44. if (subpath === '.' || subpath === './package.json') {
  45. continue
  46. }
  47. if (!subpath.startsWith('./')) {
  48. continue
  49. }
  50. const target = pickExportTarget(exportConfig)
  51. if (!target || typeof target !== 'string') {
  52. continue
  53. }
  54. const aliasKey = `@aws-sdk/${pkgName}/${subpath.slice(2)}`
  55. aliases[aliasKey] = path.resolve(pkgRoot, target)
  56. }
  57. }
  58. return aliases
  59. }
  60. module.exports = { buildAwsSdkAliases }