Help Codegen to find library's package.json after failure of importing library's package.json due to missing of ./package.json subpath#53195
Conversation
|
Hi @RakaDoank! Thank you for your pull request and welcome to our community. Action RequiredIn order to merge any pull request (code, docs, etc.), we require contributors to sign our Contributor License Agreement, and we don't seem to have one on file for you. ProcessIn order for us to review and merge your suggested changes, please sign at https://code.facebook.com/cla. If you are contributing on behalf of someone else (eg your employer), the individual CLA may not be sufficient and your employer may need to sign the corporate CLA. Once the CLA is signed, our tooling will perform checks and validations. Afterwards, the pull request will be tagged with If you have received this in error or have any questions, please contact us at cla@meta.com. Thanks! |
|
Thank you for signing our Contributor License Agreement. We can now accept your code for this (and any) Meta Open Source project. Thanks! |
cipolleschi
left a comment
There was a problem hiding this comment.
@RakaDoank Thanks for the fix, this is amazing.!
|
@cipolleschi has imported this pull request. If you are a Meta employee, you can view this in D79993649. |
…fix-library-missing-package-json-subpath
|
@cipolleschi merged this pull request in 8dcb18d. |
|
This pull request was successfully merged by @RakaDoank in 8dcb18d When will my fix make it into a release? | How to file a pick request? |
|
This is currently breaking CI on main: We'll have to revert it an get this PR back again with the proper fix |
|
This pull request has been reverted by 677ee67. |
…g library's package.json due to missing of `./package.json` subpath (facebook#53195) Summary: This is fix for some React Native libraries can't be found by Codegen, and will make the libraries unusable in new architecture (Turbo Modules) Internally in the Codegen script, it will try to import library's package.json file with the `require.resolve`, but for some React Native libraries will throw an error with `ERR_PACKAGE_PATH_NOT_EXPORTED` code due to using the `exports` field in their package.json file while not exposing the package.json file itself. As an example ```json { "exports": { ".": { "import": { "types": "./lib/typescript/module/index.d.ts", "default": "./lib/module/index.js" }, "require": { "types": "./lib/typescript/commonjs/index.d.ts", "default": "./lib/commonjs/index.js" } }, "./package.json": "./package.json" <-- here some libraries missed this }, "codegenConfig": {} } ``` Personally feel weird that library author has to expose their package.json only for the sake of Codegen and i believe library author shouldn't, even the library consumer don't need it. ## Changelog: <!-- Help reviewers and the release process by writing your own changelog entry. Pick one each for the category and type tags: For more details, see: https://reactnative.dev/contributing/changelogs-in-pull-requests --> [GENERAL] [FIXED] - Help Codegen find library's package.json if some libraries using `exports` field in their package.json file and the `./package.json` subpath is not explicitly defined bypass-github-export-checks Test Plan: `require.resolve('library/package.json')` [here](https://github.com/facebook/react-native/blob/main/packages/react-native/scripts/codegen/generate-artifacts-executor/utils.js#L203) will throw an error with `ERR_PACKAGE_PATH_NOT_EXPORTED` code by Node.js. So if it does, help Codegen retry to find closest library's package.json with [`require.main.paths`](https://nodejs.org/api/modules.html#requiremain) search paths You can init new app React Native CLI app with my sample react native library here [`ping-react-native`](https://github.com/RakaDoank/ping-react-native) v1.2.2. Due to missing of the `package.json` subpath, before this change, it's autolinked but unusable due to missing of the spec header file. After this change, it works normally. Rollback Plan: Reviewed By: cortinico Differential Revision: D80080243 Pulled By: cipolleschi
…g library's package.json due to missing of `./package.json` subpath (#53220) Summary: Pull Request resolved: #53220 This is fix for some React Native libraries can't be found by Codegen, and will make the libraries unusable in new architecture (Turbo Modules) Internally in the Codegen script, it will try to import library's package.json file with the `require.resolve`, but for some React Native libraries will throw an error with `ERR_PACKAGE_PATH_NOT_EXPORTED` code due to using the `exports` field in their package.json file while not exposing the package.json file itself. As an example ```json { "exports": { ".": { "import": { "types": "./lib/typescript/module/index.d.ts", "default": "./lib/module/index.js" }, "require": { "types": "./lib/typescript/commonjs/index.d.ts", "default": "./lib/commonjs/index.js" } }, "./package.json": "./package.json" <-- here some libraries missed this }, "codegenConfig": {} } ``` Personally feel weird that library author has to expose their package.json only for the sake of Codegen and i believe library author shouldn't, even the library consumer don't need it. ## Changelog: <!-- Help reviewers and the release process by writing your own changelog entry. Pick one each for the category and type tags: For more details, see: https://reactnative.dev/contributing/changelogs-in-pull-requests --> [GENERAL] [FIXED] - Help Codegen find library's package.json if some libraries using `exports` field in their package.json file and the `./package.json` subpath is not explicitly defined bypass-github-export-checks Pull Request resolved: #53195 Test Plan: `require.resolve('library/package.json')` [here](https://github.com/facebook/react-native/blob/main/packages/react-native/scripts/codegen/generate-artifacts-executor/utils.js#L203) will throw an error with `ERR_PACKAGE_PATH_NOT_EXPORTED` code by Node.js. So if it does, help Codegen retry to find closest library's package.json with [`require.main.paths`](https://nodejs.org/api/modules.html#requiremain) search paths You can init new app React Native CLI app with my sample react native library here [`ping-react-native`](https://github.com/RakaDoank/ping-react-native) v1.2.2. Due to missing of the `package.json` subpath, before this change, it's autolinked but unusable due to missing of the spec header file. After this change, it works normally. Rollback Plan: Reviewed By: cortinico Differential Revision: D80080243 Pulled By: cipolleschi fbshipit-source-id: d33bf9eeb385ccf0c076e4d800a0d2840bd91b68
Summary:
This is fix for some React Native libraries can't be found by Codegen, and will make the libraries unusable in new architecture (Turbo Modules)
Internally in the Codegen script, it will try to import library's package.json file with the
require.resolve, but for some React Native libraries will throw an error withERR_PACKAGE_PATH_NOT_EXPORTEDcode due to using theexportsfield in their package.json file while not exposing the package.json file itself. As an example{ "exports": { ".": { "import": { "types": "./lib/typescript/module/index.d.ts", "default": "./lib/module/index.js" }, "require": { "types": "./lib/typescript/commonjs/index.d.ts", "default": "./lib/commonjs/index.js" } }, "./package.json": "./package.json" <-- here some libraries missed this }, "codegenConfig": {} }Personally feel weird that library author has to expose their package.json only for the sake of Codegen and i believe library author shouldn't, even the library consumer don't need it.
Changelog:
[GENERAL] [FIXED] - Help Codegen find library's package.json if some libraries using
exportsfield in their package.json file and the./package.jsonsubpath is not explicitly definedTest Plan:
require.resolve('library/package.json')here will throw an error withERR_PACKAGE_PATH_NOT_EXPORTEDcode by Node.js. So if it does, help Codegen retry to find closest library's package.json withrequire.main.pathssearch pathsYou can init new app React Native CLI app with my sample react native library here
ping-react-nativev1.2.2.Due to missing of the
package.jsonsubpath, before this change, it's autolinked but unusable due to missing of the spec header file. After this change, it works normally.