Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Multiple modulesDirs #32

Closed
artaommahe opened this issue Jun 11, 2017 · 4 comments
Closed

Multiple modulesDirs #32

artaommahe opened this issue Jun 11, 2017 · 4 comments

Comments

@artaommahe
Copy link

In my project i has common package.json with common modules and child modules with their specific libs. So for modulesDir option i need to define both node_modules folders for proper bundling.

@barraq barraq mentioned this issue Nov 2, 2017
2 tasks
@lostpebble
Copy link

Please, this is very important. Especially when working with things such as yarn workspaces now. There are multiple node_modules folders to take into account.

@pfiaux
Copy link

pfiaux commented Sep 14, 2018

Looking for a solution to a similar problem. Looks like there's a lot of similar issues about nested/parallel node_modules/ folders:
#39
#29
#21

I'm not sure what an accurate summary of the problem would be since there's different use cases. Perhaps "Fix nodeExternals only excluding root node_modules folder"?

Assuming my comment nicely cross references all the issues with links, all but one can be closed to avoid confusion. @liady what do you think?

@pfiaux
Copy link

pfiaux commented Jan 11, 2019

There was a suggestion in the PR comments above to use multiple calls to node externals however this doesn't necessarily work when a whitelist is used. We were able to find a solution that worked with some tweaks without the need for multiple ModulesDir.

The following config works if you have a local package which should be bundled but without it's dependencies:

  nodeExternals({
    whitelist: ['linked_module_b'],
    modulesDir: path.resolve('path_to_module_a'),
  }),

say the setup is:

module_a/
  index.js // we want to bundle
  package.json
  node_modules/ // we don't want to bundle
module_b/
  index.js // we want to bundle
  package.json
  node_modules/ // we don't want to bundle
package.json
webpack.config
node_modules/

Note:

  • module_a must have all of module_b's dependencies, otherwise they will not count as externals
  • because weback might run in the root but module_a's packages are in module_a/node_modules/ we need to use moduleDir
  • I haven't tried this with an additional linked module say module_c, it might work with an extra nodeExternals({whitelist: ['linked_module_c'], ...}),

I found it's really helpful to make a diagram of where your modules and their respective node_modules folders are to identify why some dependencies are considered external or not.

For example if you also rely on say lodash being available but its only installed in the root, the config above will try to bundle it because it's not in module_a/node_modules so you should be able to make it work with something like

externals: [
  {
    lodash: 'lodash', // something that's outside of the modulesDir below
  },
  nodeExternals({
    whitelist: ['linked_module_b'],
    modulesDir: path.resolve('path_to_module_a'), // linked_module_b's dependencies need to be here too!
  }),
],

Looks like #56 also duplicates this.

@liady
Copy link
Owner

liady commented Jul 8, 2020

In version 2.1.0 there is not the possibility to add additionalModuleDirs to the options

@liady liady closed this as completed Jul 8, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants