Comments (4)
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.
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.
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.
In version 2.1.0
there is not the possibility to add additionalModuleDirs
to the options
from webpack-node-externals.
Related Issues (20)
- ReferenceError: requiere is not defined on gulp postcss HOT 1
- WARNING: Could not determine version of module x HOT 1
- README confusingly advises removing "target: 'node'" for Webpack 5 HOT 2
- Unsupported type in webpack 5 HOT 1
- Support for Yarn 2 PnP HOT 1
- Switch to ESM HOT 7
- version 3.0.0 - moduleFromFile fileName not working
- Undesired package being included in the bundled ouput
- Is it only relevant for node target libraries ?
- Support options.skiplist (=[])
- Do we need to set `externalsPresets` when `target: 'node'`?
- Adding a debug mode
- Option 'includeAbsolutePaths' can't work well with inline loader
- How can I bundle assets (i.e css files) from node_modules that required in node_modules? HOT 1
- importType option misses some type definitions. HOT 2
- webpack serve error: interopRequireWildcard":1 Uncaught ReferenceError: require is not defined HOT 2
- Add support for resolving modules with context within monorepos HOT 5
- change location of package.json HOT 2
- Inverse behavior?
- Noob question: After excluding modules from webpack, how do I get them into my Electron app's node_modules folder? HOT 3
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
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.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from webpack-node-externals.