WIP: build: accept option for react-native project path - #749

Closed
tbergquist-godaddy wants to merge 1 commit into
react-native-community:masterfrom
tbergquist-godaddy:monorepo-setup
Closed

WIP: build: accept option for react-native project path#749
tbergquist-godaddy wants to merge 1 commit into
react-native-community:masterfrom
tbergquist-godaddy:monorepo-setup

Conversation

@tbergquist-godaddy

Copy link
Copy Markdown

Summary:

In monorepos, the root path, where node_modules live
might not be the same as where the actual react-native project is.

Test Plan:

I created a new react-native project, ran yarn android, and it still works. I tested it from our monorepo (sorry, it is closed source) and it works. I can provide you with open-source monorepo to test it later if necessary.

I still consider this to be work in progress. I want to do similar changes also for iOS.
Also, I would like to use commander for reading the rn-project-path, or if there is a better way, please suggest.

As for the commander, I still don't understand it fully, since when I try to read the command args before the loadConfig call, the program exits.

Also, maybe add some tests if it makes sense

closes#717

@tbergquist-godaddy

Copy link
Copy Markdown
Author

From what I can see, iOS does not call react-native config does it?

If it does, where exactly does it call it?

@thymikee

Copy link
Copy Markdown
Member

iOS uses config as well: https://github.com/react-native-community/cli/blob/master/packages/platform-ios/native_modules.rb#L14

Thanks for sending the PR :). I'll try to process it next week. We'd like to make a better story for monorepos and custom directory structures (there's a lot of open issues and PRs trying to address that, but we need to think it through). I'm not yet sure if it's gonna be by adding an extra flag, we'll see.

@tbergquist-godaddy

Copy link
Copy Markdown
Author

iOS uses config as well

Ah, yes it does 💡, but for my project setup, this does not need to change, since it is already called where my react-native-project is, and that works.

Which is probably why I thought I was not called at all 😊

@tbergquist-godaddy
tbergquist-godaddyforce-pushed the monorepo-setup branch 2 times, most recently from 7076820 to 71c7eecCompareSeptember 30, 2019 06:14
@tbergquist-godaddy

Copy link
Copy Markdown
Author

Ok, I am beginning to understand that this problem is a little bit more complex.

The changes that I did so far allows me to build the android app, which without these changes crashes. However, images from 3rd party libraries are missing, like react-navigation-stack back button image.

On iOS it was building correctly and all assets like the back button is correctly in the development version. But they are missing in production build version 🤔

In monorepos, the root path, where node_modules live
might not be the same as where the actual react-native project is.
@grabbou

Copy link
Copy Markdown
Member

Hm, I have a feeling we have seen (or actually had) previous attempts on supporting monorepos in this project. What was the outcome of these?

I was thinking that any additional configuration like that (e.g. node_modules location) could be part of the configuration if that makes any sense.

I also wonder how other tools approach this problem.

@tbergquist-godaddy

Copy link
Copy Markdown
Author

I think what needs to be solved is:

• In which path to run react-native config (this PR)
• How to make sure bundle assets are added correctly, both for dev & production.

I don't understand why 3rd party assets are correctly bundled in on iOS for dev, but not for android. What are the platform differences there?

Also, I don't understand why these 3rd party differences disappears on iOS production build.

I was thinking that any additional configuration like that (e.g. node_modules location) could be part of the configuration if that makes any sense.

Maybe something like this. The metro bundler already has watchFolders, which makes it possible to tell metro which other folders to bundle code from. Maybe something like this is needed for the cli as well 🤷‍♂

@grabbou

grabbou commented Oct 3, 2019

Copy link
Copy Markdown
Member

In which path to run react-native config (this PR)

I am wondering if we shouldn't leverage the cosmiconfig ability to look for the configuration up the tree.

Cosmiconfig continues to search up the directory tree, checking each of these places in each directory, until it finds some acceptable configuration (or hits the home directory).

In that case, the place you're running react-native config from wouldn't essentially matter. Right now, we have specified the stopDir property, making it not look outside of the cwd.

If we would let it look up the tree, running it from packages/mobile would read it in packages/mobile, packages and . (and possibly even further up the tree, but that's probably acceptable trade-off).

This is aligned with require.resolve AFAIK and shouldn't cause problems when a command is executed at a different level than node_modules.

What do you think?

@grabbou

Copy link
Copy Markdown
Member

The big question here is: why we haven't turned it on by default?

I remember trying it out and hitting some issues. I guess it would be a good starting point to try to do it and see what happens (and observe our test suite blow up)

@tbergquist-godaddy

Copy link
Copy Markdown
Author

Yeah, that sounds good.

@tbergquist-godaddy

Copy link
Copy Markdown
Author

So, if that is the preferred approach, please feel free to close this PR.

@grabbou

Copy link
Copy Markdown
Member

All righty! Do you plan on working on that approach? I'd love to help (e.g. via Discord) if you have capacity. If not, don't worry!

@grabbougrabbou closed this Oct 3, 2019
@tbergquist-godaddy

Copy link
Copy Markdown
Author

I will try to have a look at it tomorrow (not promising anything), and I will let you know.

Is there a channel for this on discord, do you have a link?

@grabbou

Copy link
Copy Markdown
Member

Are you on React Native Community Discord? There's #cli channel there. If not, I can issue you an invite.

@tbergquist-godaddy

Copy link
Copy Markdown
Author

Please send an invite 😊

@grabbou

Copy link
Copy Markdown
Member

Actually my bad, we already look for the configuration file recursively. Then I guess I need to better understand the root cause.

Sending

@grabbou

Copy link
Copy Markdown
Member

@tbergq, I have sent another PR #769 to remove the recursive reading of the configuration.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Properly configuring cli

3 participants

@tbergquist-godaddy@thymikee@grabbou
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

WIP: build: accept option for react-native project path - #749

Closed
tbergquist-godaddy wants to merge 1 commit into
react-native-community:masterfrom
tbergquist-godaddy:monorepo-setup
Closed

WIP: build: accept option for react-native project path#749
tbergquist-godaddy wants to merge 1 commit into
react-native-community:masterfrom
tbergquist-godaddy:monorepo-setup

Conversation

@tbergquist-godaddy

Copy link
Copy Markdown

Summary:

In monorepos, the root path, where node_modules live
might not be the same as where the actual react-native project is.

Test Plan:

I created a new react-native project, ran yarn android, and it still works. I tested it from our monorepo (sorry, it is closed source) and it works. I can provide you with open-source monorepo to test it later if necessary.

I still consider this to be work in progress. I want to do similar changes also for iOS.
Also, I would like to use commander for reading the rn-project-path, or if there is a better way, please suggest.

As for the commander, I still don't understand it fully, since when I try to read the command args before the loadConfig call, the program exits.

Also, maybe add some tests if it makes sense

closes#717

@tbergquist-godaddy

Copy link
Copy Markdown
Author

From what I can see, iOS does not call react-native config does it?

If it does, where exactly does it call it?

@thymikee

Copy link
Copy Markdown
Member

iOS uses config as well: https://github.com/react-native-community/cli/blob/master/packages/platform-ios/native_modules.rb#L14

Thanks for sending the PR :). I'll try to process it next week. We'd like to make a better story for monorepos and custom directory structures (there's a lot of open issues and PRs trying to address that, but we need to think it through). I'm not yet sure if it's gonna be by adding an extra flag, we'll see.

@tbergquist-godaddy

Copy link
Copy Markdown
Author

iOS uses config as well

Ah, yes it does 💡, but for my project setup, this does not need to change, since it is already called where my react-native-project is, and that works.

Which is probably why I thought I was not called at all 😊

@tbergquist-godaddy
tbergquist-godaddyforce-pushed the monorepo-setup branch 2 times, most recently from 7076820 to 71c7eecCompareSeptember 30, 2019 06:14
@tbergquist-godaddy

Copy link
Copy Markdown
Author

Ok, I am beginning to understand that this problem is a little bit more complex.

The changes that I did so far allows me to build the android app, which without these changes crashes. However, images from 3rd party libraries are missing, like react-navigation-stack back button image.

On iOS it was building correctly and all assets like the back button is correctly in the development version. But they are missing in production build version 🤔

In monorepos, the root path, where node_modules live
might not be the same as where the actual react-native project is.
@grabbou

Copy link
Copy Markdown
Member

Hm, I have a feeling we have seen (or actually had) previous attempts on supporting monorepos in this project. What was the outcome of these?

I was thinking that any additional configuration like that (e.g. node_modules location) could be part of the configuration if that makes any sense.

I also wonder how other tools approach this problem.

@tbergquist-godaddy

Copy link
Copy Markdown
Author

I think what needs to be solved is:

• In which path to run react-native config (this PR)
• How to make sure bundle assets are added correctly, both for dev & production.

I don't understand why 3rd party assets are correctly bundled in on iOS for dev, but not for android. What are the platform differences there?

Also, I don't understand why these 3rd party differences disappears on iOS production build.

I was thinking that any additional configuration like that (e.g. node_modules location) could be part of the configuration if that makes any sense.

Maybe something like this. The metro bundler already has watchFolders, which makes it possible to tell metro which other folders to bundle code from. Maybe something like this is needed for the cli as well 🤷‍♂

@grabbou

grabbou commented Oct 3, 2019

Copy link
Copy Markdown
Member

In which path to run react-native config (this PR)

I am wondering if we shouldn't leverage the cosmiconfig ability to look for the configuration up the tree.

Cosmiconfig continues to search up the directory tree, checking each of these places in each directory, until it finds some acceptable configuration (or hits the home directory).

In that case, the place you're running react-native config from wouldn't essentially matter. Right now, we have specified the stopDir property, making it not look outside of the cwd.

If we would let it look up the tree, running it from packages/mobile would read it in packages/mobile, packages and . (and possibly even further up the tree, but that's probably acceptable trade-off).

This is aligned with require.resolve AFAIK and shouldn't cause problems when a command is executed at a different level than node_modules.

What do you think?

@grabbou

Copy link
Copy Markdown
Member

The big question here is: why we haven't turned it on by default?

I remember trying it out and hitting some issues. I guess it would be a good starting point to try to do it and see what happens (and observe our test suite blow up)

@tbergquist-godaddy

Copy link
Copy Markdown
Author

Yeah, that sounds good.

@tbergquist-godaddy

Copy link
Copy Markdown
Author

So, if that is the preferred approach, please feel free to close this PR.

@grabbou

Copy link
Copy Markdown
Member

All righty! Do you plan on working on that approach? I'd love to help (e.g. via Discord) if you have capacity. If not, don't worry!

@grabbougrabbou closed this Oct 3, 2019
@tbergquist-godaddy

Copy link
Copy Markdown
Author

I will try to have a look at it tomorrow (not promising anything), and I will let you know.

Is there a channel for this on discord, do you have a link?

@grabbou

Copy link
Copy Markdown
Member

Are you on React Native Community Discord? There's #cli channel there. If not, I can issue you an invite.

@tbergquist-godaddy

Copy link
Copy Markdown
Author

Please send an invite 😊

@grabbou

Copy link
Copy Markdown
Member

Actually my bad, we already look for the configuration file recursively. Then I guess I need to better understand the root cause.

Sending

@grabbou

Copy link
Copy Markdown
Member

@tbergq, I have sent another PR #769 to remove the recursive reading of the configuration.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Properly configuring cli

3 participants

@tbergquist-godaddy@thymikee@grabbou
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

WIP: build: accept option for react-native project path - #749

Closed
tbergquist-godaddy wants to merge 1 commit into
react-native-community:masterfrom
tbergquist-godaddy:monorepo-setup
Closed

WIP: build: accept option for react-native project path#749
tbergquist-godaddy wants to merge 1 commit into
react-native-community:masterfrom
tbergquist-godaddy:monorepo-setup

Conversation

@tbergquist-godaddy

Copy link
Copy Markdown

Summary:

In monorepos, the root path, where node_modules live
might not be the same as where the actual react-native project is.

Test Plan:

I created a new react-native project, ran yarn android, and it still works. I tested it from our monorepo (sorry, it is closed source) and it works. I can provide you with open-source monorepo to test it later if necessary.

I still consider this to be work in progress. I want to do similar changes also for iOS.
Also, I would like to use commander for reading the rn-project-path, or if there is a better way, please suggest.

As for the commander, I still don't understand it fully, since when I try to read the command args before the loadConfig call, the program exits.

Also, maybe add some tests if it makes sense

closes#717

@tbergquist-godaddy

Copy link
Copy Markdown
Author

From what I can see, iOS does not call react-native config does it?

If it does, where exactly does it call it?

@thymikee

Copy link
Copy Markdown
Member

iOS uses config as well: https://github.com/react-native-community/cli/blob/master/packages/platform-ios/native_modules.rb#L14

Thanks for sending the PR :). I'll try to process it next week. We'd like to make a better story for monorepos and custom directory structures (there's a lot of open issues and PRs trying to address that, but we need to think it through). I'm not yet sure if it's gonna be by adding an extra flag, we'll see.

@tbergquist-godaddy

Copy link
Copy Markdown
Author

iOS uses config as well

Ah, yes it does 💡, but for my project setup, this does not need to change, since it is already called where my react-native-project is, and that works.

Which is probably why I thought I was not called at all 😊

@tbergquist-godaddy
tbergquist-godaddyforce-pushed the monorepo-setup branch 2 times, most recently from 7076820 to 71c7eecCompareSeptember 30, 2019 06:14
@tbergquist-godaddy

Copy link
Copy Markdown
Author

Ok, I am beginning to understand that this problem is a little bit more complex.

The changes that I did so far allows me to build the android app, which without these changes crashes. However, images from 3rd party libraries are missing, like react-navigation-stack back button image.

On iOS it was building correctly and all assets like the back button is correctly in the development version. But they are missing in production build version 🤔

In monorepos, the root path, where node_modules live
might not be the same as where the actual react-native project is.
@grabbou

Copy link
Copy Markdown
Member

Hm, I have a feeling we have seen (or actually had) previous attempts on supporting monorepos in this project. What was the outcome of these?

I was thinking that any additional configuration like that (e.g. node_modules location) could be part of the configuration if that makes any sense.

I also wonder how other tools approach this problem.

@tbergquist-godaddy

Copy link
Copy Markdown
Author

I think what needs to be solved is:

• In which path to run react-native config (this PR)
• How to make sure bundle assets are added correctly, both for dev & production.

I don't understand why 3rd party assets are correctly bundled in on iOS for dev, but not for android. What are the platform differences there?

Also, I don't understand why these 3rd party differences disappears on iOS production build.

I was thinking that any additional configuration like that (e.g. node_modules location) could be part of the configuration if that makes any sense.

Maybe something like this. The metro bundler already has watchFolders, which makes it possible to tell metro which other folders to bundle code from. Maybe something like this is needed for the cli as well 🤷‍♂

@grabbou

grabbou commented Oct 3, 2019

Copy link
Copy Markdown
Member

In which path to run react-native config (this PR)

I am wondering if we shouldn't leverage the cosmiconfig ability to look for the configuration up the tree.

Cosmiconfig continues to search up the directory tree, checking each of these places in each directory, until it finds some acceptable configuration (or hits the home directory).

In that case, the place you're running react-native config from wouldn't essentially matter. Right now, we have specified the stopDir property, making it not look outside of the cwd.

If we would let it look up the tree, running it from packages/mobile would read it in packages/mobile, packages and . (and possibly even further up the tree, but that's probably acceptable trade-off).

This is aligned with require.resolve AFAIK and shouldn't cause problems when a command is executed at a different level than node_modules.

What do you think?

@grabbou

Copy link
Copy Markdown
Member

The big question here is: why we haven't turned it on by default?

I remember trying it out and hitting some issues. I guess it would be a good starting point to try to do it and see what happens (and observe our test suite blow up)

@tbergquist-godaddy

Copy link
Copy Markdown
Author

Yeah, that sounds good.

@tbergquist-godaddy

Copy link
Copy Markdown
Author

So, if that is the preferred approach, please feel free to close this PR.

@grabbou

Copy link
Copy Markdown
Member

All righty! Do you plan on working on that approach? I'd love to help (e.g. via Discord) if you have capacity. If not, don't worry!

@grabbougrabbou closed this Oct 3, 2019
@tbergquist-godaddy

Copy link
Copy Markdown
Author

I will try to have a look at it tomorrow (not promising anything), and I will let you know.

Is there a channel for this on discord, do you have a link?

@grabbou

Copy link
Copy Markdown
Member

Are you on React Native Community Discord? There's #cli channel there. If not, I can issue you an invite.

@tbergquist-godaddy

Copy link
Copy Markdown
Author

Please send an invite 😊

@grabbou

Copy link
Copy Markdown
Member

Actually my bad, we already look for the configuration file recursively. Then I guess I need to better understand the root cause.

Sending

@grabbou

Copy link
Copy Markdown
Member

@tbergq, I have sent another PR #769 to remove the recursive reading of the configuration.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Properly configuring cli

3 participants

@tbergquist-godaddy@thymikee@grabbou
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

WIP: build: accept option for react-native project path - #749

Closed
tbergquist-godaddy wants to merge 1 commit into
react-native-community:masterfrom
tbergquist-godaddy:monorepo-setup
Closed

WIP: build: accept option for react-native project path#749
tbergquist-godaddy wants to merge 1 commit into
react-native-community:masterfrom
tbergquist-godaddy:monorepo-setup

Conversation

@tbergquist-godaddy

Copy link
Copy Markdown

Summary:

In monorepos, the root path, where node_modules live
might not be the same as where the actual react-native project is.

Test Plan:

I created a new react-native project, ran yarn android, and it still works. I tested it from our monorepo (sorry, it is closed source) and it works. I can provide you with open-source monorepo to test it later if necessary.

I still consider this to be work in progress. I want to do similar changes also for iOS.
Also, I would like to use commander for reading the rn-project-path, or if there is a better way, please suggest.

As for the commander, I still don't understand it fully, since when I try to read the command args before the loadConfig call, the program exits.

Also, maybe add some tests if it makes sense

closes#717

@tbergquist-godaddy

Copy link
Copy Markdown
Author

From what I can see, iOS does not call react-native config does it?

If it does, where exactly does it call it?

@thymikee

Copy link
Copy Markdown
Member

iOS uses config as well: https://github.com/react-native-community/cli/blob/master/packages/platform-ios/native_modules.rb#L14

Thanks for sending the PR :). I'll try to process it next week. We'd like to make a better story for monorepos and custom directory structures (there's a lot of open issues and PRs trying to address that, but we need to think it through). I'm not yet sure if it's gonna be by adding an extra flag, we'll see.

@tbergquist-godaddy

Copy link
Copy Markdown
Author

iOS uses config as well

Ah, yes it does 💡, but for my project setup, this does not need to change, since it is already called where my react-native-project is, and that works.

Which is probably why I thought I was not called at all 😊

@tbergquist-godaddy
tbergquist-godaddyforce-pushed the monorepo-setup branch 2 times, most recently from 7076820 to 71c7eecCompareSeptember 30, 2019 06:14
@tbergquist-godaddy

Copy link
Copy Markdown
Author

Ok, I am beginning to understand that this problem is a little bit more complex.

The changes that I did so far allows me to build the android app, which without these changes crashes. However, images from 3rd party libraries are missing, like react-navigation-stack back button image.

On iOS it was building correctly and all assets like the back button is correctly in the development version. But they are missing in production build version 🤔

In monorepos, the root path, where node_modules live
might not be the same as where the actual react-native project is.
@grabbou

Copy link
Copy Markdown
Member

Hm, I have a feeling we have seen (or actually had) previous attempts on supporting monorepos in this project. What was the outcome of these?

I was thinking that any additional configuration like that (e.g. node_modules location) could be part of the configuration if that makes any sense.

I also wonder how other tools approach this problem.

@tbergquist-godaddy

Copy link
Copy Markdown
Author

I think what needs to be solved is:

• In which path to run react-native config (this PR)
• How to make sure bundle assets are added correctly, both for dev & production.

I don't understand why 3rd party assets are correctly bundled in on iOS for dev, but not for android. What are the platform differences there?

Also, I don't understand why these 3rd party differences disappears on iOS production build.

I was thinking that any additional configuration like that (e.g. node_modules location) could be part of the configuration if that makes any sense.

Maybe something like this. The metro bundler already has watchFolders, which makes it possible to tell metro which other folders to bundle code from. Maybe something like this is needed for the cli as well 🤷‍♂

@grabbou

grabbou commented Oct 3, 2019

Copy link
Copy Markdown
Member

In which path to run react-native config (this PR)

I am wondering if we shouldn't leverage the cosmiconfig ability to look for the configuration up the tree.

Cosmiconfig continues to search up the directory tree, checking each of these places in each directory, until it finds some acceptable configuration (or hits the home directory).

In that case, the place you're running react-native config from wouldn't essentially matter. Right now, we have specified the stopDir property, making it not look outside of the cwd.

If we would let it look up the tree, running it from packages/mobile would read it in packages/mobile, packages and . (and possibly even further up the tree, but that's probably acceptable trade-off).

This is aligned with require.resolve AFAIK and shouldn't cause problems when a command is executed at a different level than node_modules.

What do you think?

@grabbou

Copy link
Copy Markdown
Member

The big question here is: why we haven't turned it on by default?

I remember trying it out and hitting some issues. I guess it would be a good starting point to try to do it and see what happens (and observe our test suite blow up)

@tbergquist-godaddy

Copy link
Copy Markdown
Author

Yeah, that sounds good.

@tbergquist-godaddy

Copy link
Copy Markdown
Author

So, if that is the preferred approach, please feel free to close this PR.

@grabbou

Copy link
Copy Markdown
Member

All righty! Do you plan on working on that approach? I'd love to help (e.g. via Discord) if you have capacity. If not, don't worry!

@grabbougrabbou closed this Oct 3, 2019
@tbergquist-godaddy

Copy link
Copy Markdown
Author

I will try to have a look at it tomorrow (not promising anything), and I will let you know.

Is there a channel for this on discord, do you have a link?

@grabbou

Copy link
Copy Markdown
Member

Are you on React Native Community Discord? There's #cli channel there. If not, I can issue you an invite.

@tbergquist-godaddy

Copy link
Copy Markdown
Author

Please send an invite 😊

@grabbou

Copy link
Copy Markdown
Member

Actually my bad, we already look for the configuration file recursively. Then I guess I need to better understand the root cause.

Sending

@grabbou

Copy link
Copy Markdown
Member

@tbergq, I have sent another PR #769 to remove the recursive reading of the configuration.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Properly configuring cli

3 participants

@tbergquist-godaddy@thymikee@grabbou
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

WIP: build: accept option for react-native project path - #749

Closed
tbergquist-godaddy wants to merge 1 commit into
react-native-community:masterfrom
tbergquist-godaddy:monorepo-setup
Closed

WIP: build: accept option for react-native project path#749
tbergquist-godaddy wants to merge 1 commit into
react-native-community:masterfrom
tbergquist-godaddy:monorepo-setup

Conversation

@tbergquist-godaddy

Copy link
Copy Markdown

Summary:

In monorepos, the root path, where node_modules live
might not be the same as where the actual react-native project is.

Test Plan:

I created a new react-native project, ran yarn android, and it still works. I tested it from our monorepo (sorry, it is closed source) and it works. I can provide you with open-source monorepo to test it later if necessary.

I still consider this to be work in progress. I want to do similar changes also for iOS.
Also, I would like to use commander for reading the rn-project-path, or if there is a better way, please suggest.

As for the commander, I still don't understand it fully, since when I try to read the command args before the loadConfig call, the program exits.

Also, maybe add some tests if it makes sense

closes#717

@tbergquist-godaddy

Copy link
Copy Markdown
Author

From what I can see, iOS does not call react-native config does it?

If it does, where exactly does it call it?

@thymikee

Copy link
Copy Markdown
Member

iOS uses config as well: https://github.com/react-native-community/cli/blob/master/packages/platform-ios/native_modules.rb#L14

Thanks for sending the PR :). I'll try to process it next week. We'd like to make a better story for monorepos and custom directory structures (there's a lot of open issues and PRs trying to address that, but we need to think it through). I'm not yet sure if it's gonna be by adding an extra flag, we'll see.

@tbergquist-godaddy

Copy link
Copy Markdown
Author

iOS uses config as well

Ah, yes it does 💡, but for my project setup, this does not need to change, since it is already called where my react-native-project is, and that works.

Which is probably why I thought I was not called at all 😊

@tbergquist-godaddy
tbergquist-godaddyforce-pushed the monorepo-setup branch 2 times, most recently from 7076820 to 71c7eecCompareSeptember 30, 2019 06:14
@tbergquist-godaddy

Copy link
Copy Markdown
Author

Ok, I am beginning to understand that this problem is a little bit more complex.

The changes that I did so far allows me to build the android app, which without these changes crashes. However, images from 3rd party libraries are missing, like react-navigation-stack back button image.

On iOS it was building correctly and all assets like the back button is correctly in the development version. But they are missing in production build version 🤔

In monorepos, the root path, where node_modules live
might not be the same as where the actual react-native project is.
@grabbou

Copy link
Copy Markdown
Member

Hm, I have a feeling we have seen (or actually had) previous attempts on supporting monorepos in this project. What was the outcome of these?

I was thinking that any additional configuration like that (e.g. node_modules location) could be part of the configuration if that makes any sense.

I also wonder how other tools approach this problem.

@tbergquist-godaddy

Copy link
Copy Markdown
Author

I think what needs to be solved is:

• In which path to run react-native config (this PR)
• How to make sure bundle assets are added correctly, both for dev & production.

I don't understand why 3rd party assets are correctly bundled in on iOS for dev, but not for android. What are the platform differences there?

Also, I don't understand why these 3rd party differences disappears on iOS production build.

I was thinking that any additional configuration like that (e.g. node_modules location) could be part of the configuration if that makes any sense.

Maybe something like this. The metro bundler already has watchFolders, which makes it possible to tell metro which other folders to bundle code from. Maybe something like this is needed for the cli as well 🤷‍♂

@grabbou

grabbou commented Oct 3, 2019

Copy link
Copy Markdown
Member

In which path to run react-native config (this PR)

I am wondering if we shouldn't leverage the cosmiconfig ability to look for the configuration up the tree.

Cosmiconfig continues to search up the directory tree, checking each of these places in each directory, until it finds some acceptable configuration (or hits the home directory).

In that case, the place you're running react-native config from wouldn't essentially matter. Right now, we have specified the stopDir property, making it not look outside of the cwd.

If we would let it look up the tree, running it from packages/mobile would read it in packages/mobile, packages and . (and possibly even further up the tree, but that's probably acceptable trade-off).

This is aligned with require.resolve AFAIK and shouldn't cause problems when a command is executed at a different level than node_modules.

What do you think?

@grabbou

Copy link
Copy Markdown
Member

The big question here is: why we haven't turned it on by default?

I remember trying it out and hitting some issues. I guess it would be a good starting point to try to do it and see what happens (and observe our test suite blow up)

@tbergquist-godaddy

Copy link
Copy Markdown
Author

Yeah, that sounds good.

@tbergquist-godaddy

Copy link
Copy Markdown
Author

So, if that is the preferred approach, please feel free to close this PR.

@grabbou

Copy link
Copy Markdown
Member

All righty! Do you plan on working on that approach? I'd love to help (e.g. via Discord) if you have capacity. If not, don't worry!

@grabbougrabbou closed this Oct 3, 2019
@tbergquist-godaddy

Copy link
Copy Markdown
Author

I will try to have a look at it tomorrow (not promising anything), and I will let you know.

Is there a channel for this on discord, do you have a link?

@grabbou

Copy link
Copy Markdown
Member

Are you on React Native Community Discord? There's #cli channel there. If not, I can issue you an invite.

@tbergquist-godaddy

Copy link
Copy Markdown
Author

Please send an invite 😊

@grabbou

Copy link
Copy Markdown
Member

Actually my bad, we already look for the configuration file recursively. Then I guess I need to better understand the root cause.

Sending

@grabbou

Copy link
Copy Markdown
Member

@tbergq, I have sent another PR #769 to remove the recursive reading of the configuration.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Properly configuring cli

3 participants

@tbergquist-godaddy@thymikee@grabbou
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

WIP: build: accept option for react-native project path - #749

Closed
tbergquist-godaddy wants to merge 1 commit into
react-native-community:masterfrom
tbergquist-godaddy:monorepo-setup
Closed

WIP: build: accept option for react-native project path#749
tbergquist-godaddy wants to merge 1 commit into
react-native-community:masterfrom
tbergquist-godaddy:monorepo-setup

Conversation

@tbergquist-godaddy

Copy link
Copy Markdown

Summary:

In monorepos, the root path, where node_modules live
might not be the same as where the actual react-native project is.

Test Plan:

I created a new react-native project, ran yarn android, and it still works. I tested it from our monorepo (sorry, it is closed source) and it works. I can provide you with open-source monorepo to test it later if necessary.

I still consider this to be work in progress. I want to do similar changes also for iOS.
Also, I would like to use commander for reading the rn-project-path, or if there is a better way, please suggest.

As for the commander, I still don't understand it fully, since when I try to read the command args before the loadConfig call, the program exits.

Also, maybe add some tests if it makes sense

closes#717

@tbergquist-godaddy

Copy link
Copy Markdown
Author

From what I can see, iOS does not call react-native config does it?

If it does, where exactly does it call it?

@thymikee

Copy link
Copy Markdown
Member

iOS uses config as well: https://github.com/react-native-community/cli/blob/master/packages/platform-ios/native_modules.rb#L14

Thanks for sending the PR :). I'll try to process it next week. We'd like to make a better story for monorepos and custom directory structures (there's a lot of open issues and PRs trying to address that, but we need to think it through). I'm not yet sure if it's gonna be by adding an extra flag, we'll see.

@tbergquist-godaddy

Copy link
Copy Markdown
Author

iOS uses config as well

Ah, yes it does 💡, but for my project setup, this does not need to change, since it is already called where my react-native-project is, and that works.

Which is probably why I thought I was not called at all 😊

@tbergquist-godaddy
tbergquist-godaddyforce-pushed the monorepo-setup branch 2 times, most recently from 7076820 to 71c7eecCompareSeptember 30, 2019 06:14
@tbergquist-godaddy

Copy link
Copy Markdown
Author

Ok, I am beginning to understand that this problem is a little bit more complex.

The changes that I did so far allows me to build the android app, which without these changes crashes. However, images from 3rd party libraries are missing, like react-navigation-stack back button image.

On iOS it was building correctly and all assets like the back button is correctly in the development version. But they are missing in production build version 🤔

In monorepos, the root path, where node_modules live
might not be the same as where the actual react-native project is.
@grabbou

Copy link
Copy Markdown
Member

Hm, I have a feeling we have seen (or actually had) previous attempts on supporting monorepos in this project. What was the outcome of these?

I was thinking that any additional configuration like that (e.g. node_modules location) could be part of the configuration if that makes any sense.

I also wonder how other tools approach this problem.

@tbergquist-godaddy

Copy link
Copy Markdown
Author

I think what needs to be solved is:

• In which path to run react-native config (this PR)
• How to make sure bundle assets are added correctly, both for dev & production.

I don't understand why 3rd party assets are correctly bundled in on iOS for dev, but not for android. What are the platform differences there?

Also, I don't understand why these 3rd party differences disappears on iOS production build.

I was thinking that any additional configuration like that (e.g. node_modules location) could be part of the configuration if that makes any sense.

Maybe something like this. The metro bundler already has watchFolders, which makes it possible to tell metro which other folders to bundle code from. Maybe something like this is needed for the cli as well 🤷‍♂

@grabbou

grabbou commented Oct 3, 2019

Copy link
Copy Markdown
Member

In which path to run react-native config (this PR)

I am wondering if we shouldn't leverage the cosmiconfig ability to look for the configuration up the tree.

Cosmiconfig continues to search up the directory tree, checking each of these places in each directory, until it finds some acceptable configuration (or hits the home directory).

In that case, the place you're running react-native config from wouldn't essentially matter. Right now, we have specified the stopDir property, making it not look outside of the cwd.

If we would let it look up the tree, running it from packages/mobile would read it in packages/mobile, packages and . (and possibly even further up the tree, but that's probably acceptable trade-off).

This is aligned with require.resolve AFAIK and shouldn't cause problems when a command is executed at a different level than node_modules.

What do you think?

@grabbou

Copy link
Copy Markdown
Member

The big question here is: why we haven't turned it on by default?

I remember trying it out and hitting some issues. I guess it would be a good starting point to try to do it and see what happens (and observe our test suite blow up)

@tbergquist-godaddy

Copy link
Copy Markdown
Author

Yeah, that sounds good.

@tbergquist-godaddy

Copy link
Copy Markdown
Author

So, if that is the preferred approach, please feel free to close this PR.

@grabbou

Copy link
Copy Markdown
Member

All righty! Do you plan on working on that approach? I'd love to help (e.g. via Discord) if you have capacity. If not, don't worry!

@grabbougrabbou closed this Oct 3, 2019
@tbergquist-godaddy

Copy link
Copy Markdown
Author

I will try to have a look at it tomorrow (not promising anything), and I will let you know.

Is there a channel for this on discord, do you have a link?

@grabbou

Copy link
Copy Markdown
Member

Are you on React Native Community Discord? There's #cli channel there. If not, I can issue you an invite.

@tbergquist-godaddy

Copy link
Copy Markdown
Author

Please send an invite 😊

@grabbou

Copy link
Copy Markdown
Member

Actually my bad, we already look for the configuration file recursively. Then I guess I need to better understand the root cause.

Sending

@grabbou

Copy link
Copy Markdown
Member

@tbergq, I have sent another PR #769 to remove the recursive reading of the configuration.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Properly configuring cli

3 participants

@tbergquist-godaddy@thymikee@grabbou
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

WIP: build: accept option for react-native project path - #749

Closed
tbergquist-godaddy wants to merge 1 commit into
react-native-community:masterfrom
tbergquist-godaddy:monorepo-setup
Closed

WIP: build: accept option for react-native project path#749
tbergquist-godaddy wants to merge 1 commit into
react-native-community:masterfrom
tbergquist-godaddy:monorepo-setup

Conversation

@tbergquist-godaddy

Copy link
Copy Markdown

Summary:

In monorepos, the root path, where node_modules live
might not be the same as where the actual react-native project is.

Test Plan:

I created a new react-native project, ran yarn android, and it still works. I tested it from our monorepo (sorry, it is closed source) and it works. I can provide you with open-source monorepo to test it later if necessary.

I still consider this to be work in progress. I want to do similar changes also for iOS.
Also, I would like to use commander for reading the rn-project-path, or if there is a better way, please suggest.

As for the commander, I still don't understand it fully, since when I try to read the command args before the loadConfig call, the program exits.

Also, maybe add some tests if it makes sense

closes#717

@tbergquist-godaddy

Copy link
Copy Markdown
Author

From what I can see, iOS does not call react-native config does it?

If it does, where exactly does it call it?

@thymikee

Copy link
Copy Markdown
Member

iOS uses config as well: https://github.com/react-native-community/cli/blob/master/packages/platform-ios/native_modules.rb#L14

Thanks for sending the PR :). I'll try to process it next week. We'd like to make a better story for monorepos and custom directory structures (there's a lot of open issues and PRs trying to address that, but we need to think it through). I'm not yet sure if it's gonna be by adding an extra flag, we'll see.

@tbergquist-godaddy

Copy link
Copy Markdown
Author

iOS uses config as well

Ah, yes it does 💡, but for my project setup, this does not need to change, since it is already called where my react-native-project is, and that works.

Which is probably why I thought I was not called at all 😊

@tbergquist-godaddy
tbergquist-godaddyforce-pushed the monorepo-setup branch 2 times, most recently from 7076820 to 71c7eecCompareSeptember 30, 2019 06:14
@tbergquist-godaddy

Copy link
Copy Markdown
Author

Ok, I am beginning to understand that this problem is a little bit more complex.

The changes that I did so far allows me to build the android app, which without these changes crashes. However, images from 3rd party libraries are missing, like react-navigation-stack back button image.

On iOS it was building correctly and all assets like the back button is correctly in the development version. But they are missing in production build version 🤔

In monorepos, the root path, where node_modules live
might not be the same as where the actual react-native project is.
@grabbou

Copy link
Copy Markdown
Member

Hm, I have a feeling we have seen (or actually had) previous attempts on supporting monorepos in this project. What was the outcome of these?

I was thinking that any additional configuration like that (e.g. node_modules location) could be part of the configuration if that makes any sense.

I also wonder how other tools approach this problem.

@tbergquist-godaddy

Copy link
Copy Markdown
Author

I think what needs to be solved is:

• In which path to run react-native config (this PR)
• How to make sure bundle assets are added correctly, both for dev & production.

I don't understand why 3rd party assets are correctly bundled in on iOS for dev, but not for android. What are the platform differences there?

Also, I don't understand why these 3rd party differences disappears on iOS production build.

I was thinking that any additional configuration like that (e.g. node_modules location) could be part of the configuration if that makes any sense.

Maybe something like this. The metro bundler already has watchFolders, which makes it possible to tell metro which other folders to bundle code from. Maybe something like this is needed for the cli as well 🤷‍♂

@grabbou

grabbou commented Oct 3, 2019

Copy link
Copy Markdown
Member

In which path to run react-native config (this PR)

I am wondering if we shouldn't leverage the cosmiconfig ability to look for the configuration up the tree.

Cosmiconfig continues to search up the directory tree, checking each of these places in each directory, until it finds some acceptable configuration (or hits the home directory).

In that case, the place you're running react-native config from wouldn't essentially matter. Right now, we have specified the stopDir property, making it not look outside of the cwd.

If we would let it look up the tree, running it from packages/mobile would read it in packages/mobile, packages and . (and possibly even further up the tree, but that's probably acceptable trade-off).

This is aligned with require.resolve AFAIK and shouldn't cause problems when a command is executed at a different level than node_modules.

What do you think?

@grabbou

Copy link
Copy Markdown
Member

The big question here is: why we haven't turned it on by default?

I remember trying it out and hitting some issues. I guess it would be a good starting point to try to do it and see what happens (and observe our test suite blow up)

@tbergquist-godaddy

Copy link
Copy Markdown
Author

Yeah, that sounds good.

@tbergquist-godaddy

Copy link
Copy Markdown
Author

So, if that is the preferred approach, please feel free to close this PR.

@grabbou

Copy link
Copy Markdown
Member

All righty! Do you plan on working on that approach? I'd love to help (e.g. via Discord) if you have capacity. If not, don't worry!

@grabbougrabbou closed this Oct 3, 2019
@tbergquist-godaddy

Copy link
Copy Markdown
Author

I will try to have a look at it tomorrow (not promising anything), and I will let you know.

Is there a channel for this on discord, do you have a link?

@grabbou

Copy link
Copy Markdown
Member

Are you on React Native Community Discord? There's #cli channel there. If not, I can issue you an invite.

@tbergquist-godaddy

Copy link
Copy Markdown
Author

Please send an invite 😊

@grabbou

Copy link
Copy Markdown
Member

Actually my bad, we already look for the configuration file recursively. Then I guess I need to better understand the root cause.

Sending

@grabbou

Copy link
Copy Markdown
Member

@tbergq, I have sent another PR #769 to remove the recursive reading of the configuration.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Properly configuring cli

3 participants

@tbergquist-godaddy@thymikee@grabbou
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

WIP: build: accept option for react-native project path - #749

Closed
tbergquist-godaddy wants to merge 1 commit into
react-native-community:masterfrom
tbergquist-godaddy:monorepo-setup
Closed

WIP: build: accept option for react-native project path#749
tbergquist-godaddy wants to merge 1 commit into
react-native-community:masterfrom
tbergquist-godaddy:monorepo-setup

Conversation

@tbergquist-godaddy

Copy link
Copy Markdown

Summary:

In monorepos, the root path, where node_modules live
might not be the same as where the actual react-native project is.

Test Plan:

I created a new react-native project, ran yarn android, and it still works. I tested it from our monorepo (sorry, it is closed source) and it works. I can provide you with open-source monorepo to test it later if necessary.

I still consider this to be work in progress. I want to do similar changes also for iOS.
Also, I would like to use commander for reading the rn-project-path, or if there is a better way, please suggest.

As for the commander, I still don't understand it fully, since when I try to read the command args before the loadConfig call, the program exits.

Also, maybe add some tests if it makes sense

closes#717

@tbergquist-godaddy

Copy link
Copy Markdown
Author

From what I can see, iOS does not call react-native config does it?

If it does, where exactly does it call it?

@thymikee

Copy link
Copy Markdown
Member

iOS uses config as well: https://github.com/react-native-community/cli/blob/master/packages/platform-ios/native_modules.rb#L14

Thanks for sending the PR :). I'll try to process it next week. We'd like to make a better story for monorepos and custom directory structures (there's a lot of open issues and PRs trying to address that, but we need to think it through). I'm not yet sure if it's gonna be by adding an extra flag, we'll see.

@tbergquist-godaddy

Copy link
Copy Markdown
Author

iOS uses config as well

Ah, yes it does 💡, but for my project setup, this does not need to change, since it is already called where my react-native-project is, and that works.

Which is probably why I thought I was not called at all 😊

@tbergquist-godaddy
tbergquist-godaddyforce-pushed the monorepo-setup branch 2 times, most recently from 7076820 to 71c7eecCompareSeptember 30, 2019 06:14
@tbergquist-godaddy

Copy link
Copy Markdown
Author

Ok, I am beginning to understand that this problem is a little bit more complex.

The changes that I did so far allows me to build the android app, which without these changes crashes. However, images from 3rd party libraries are missing, like react-navigation-stack back button image.

On iOS it was building correctly and all assets like the back button is correctly in the development version. But they are missing in production build version 🤔

In monorepos, the root path, where node_modules live
might not be the same as where the actual react-native project is.
@grabbou

Copy link
Copy Markdown
Member

Hm, I have a feeling we have seen (or actually had) previous attempts on supporting monorepos in this project. What was the outcome of these?

I was thinking that any additional configuration like that (e.g. node_modules location) could be part of the configuration if that makes any sense.

I also wonder how other tools approach this problem.

@tbergquist-godaddy

Copy link
Copy Markdown
Author

I think what needs to be solved is:

• In which path to run react-native config (this PR)
• How to make sure bundle assets are added correctly, both for dev & production.

I don't understand why 3rd party assets are correctly bundled in on iOS for dev, but not for android. What are the platform differences there?

Also, I don't understand why these 3rd party differences disappears on iOS production build.

I was thinking that any additional configuration like that (e.g. node_modules location) could be part of the configuration if that makes any sense.

Maybe something like this. The metro bundler already has watchFolders, which makes it possible to tell metro which other folders to bundle code from. Maybe something like this is needed for the cli as well 🤷‍♂

@grabbou

grabbou commented Oct 3, 2019

Copy link
Copy Markdown
Member

In which path to run react-native config (this PR)

I am wondering if we shouldn't leverage the cosmiconfig ability to look for the configuration up the tree.

Cosmiconfig continues to search up the directory tree, checking each of these places in each directory, until it finds some acceptable configuration (or hits the home directory).

In that case, the place you're running react-native config from wouldn't essentially matter. Right now, we have specified the stopDir property, making it not look outside of the cwd.

If we would let it look up the tree, running it from packages/mobile would read it in packages/mobile, packages and . (and possibly even further up the tree, but that's probably acceptable trade-off).

This is aligned with require.resolve AFAIK and shouldn't cause problems when a command is executed at a different level than node_modules.

What do you think?

@grabbou

Copy link
Copy Markdown
Member

The big question here is: why we haven't turned it on by default?

I remember trying it out and hitting some issues. I guess it would be a good starting point to try to do it and see what happens (and observe our test suite blow up)

@tbergquist-godaddy

Copy link
Copy Markdown
Author

Yeah, that sounds good.

@tbergquist-godaddy

Copy link
Copy Markdown
Author

So, if that is the preferred approach, please feel free to close this PR.

@grabbou

Copy link
Copy Markdown
Member

All righty! Do you plan on working on that approach? I'd love to help (e.g. via Discord) if you have capacity. If not, don't worry!

@grabbougrabbou closed this Oct 3, 2019
@tbergquist-godaddy

Copy link
Copy Markdown
Author

I will try to have a look at it tomorrow (not promising anything), and I will let you know.

Is there a channel for this on discord, do you have a link?

@grabbou

Copy link
Copy Markdown
Member

Are you on React Native Community Discord? There's #cli channel there. If not, I can issue you an invite.

@tbergquist-godaddy

Copy link
Copy Markdown
Author

Please send an invite 😊

@grabbou

Copy link
Copy Markdown
Member

Actually my bad, we already look for the configuration file recursively. Then I guess I need to better understand the root cause.

Sending

@grabbou

Copy link
Copy Markdown
Member

@tbergq, I have sent another PR #769 to remove the recursive reading of the configuration.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Properly configuring cli

3 participants

@tbergquist-godaddy@thymikee@grabbou