Giter Club home page Giter Club logo

Comments (4)

lostpebble avatar lostpebble commented on May 21, 2024

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.

from webpack-node-externals.

pfiaux avatar pfiaux commented on May 21, 2024

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?

from webpack-node-externals.

pfiaux avatar pfiaux commented on May 21, 2024

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.

from webpack-node-externals.

liady avatar liady commented on May 21, 2024

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

from webpack-node-externals.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.