Comments (11)
we can resolve without log first and in case of an error we do an additional resolve with log.
from enhanced-resolve.
@TheLarkInn @sokra thoughts?
from enhanced-resolve.
Wow. This def seems like a huge win. Thanks for tagging us (GitHub notifications are the worst :( )
I'm all for this change. do you have a partial implementation so far?
PS: Congrats on submitting your first webpack/enhanced-resolve issue 🎉 🍾
from enhanced-resolve.
@sokra we could probably decouple the logger a bit better and just pass a debug flag to the resolver/factory.
TBH I only ever see this information actually show when I'm working on enhanced-resolve locally, and never during a webpack build even with --verbose
. So maybe we could remove it entirely except for when local development like you mentioned.
from enhanced-resolve.
I don't have any implementation in mind as I wasn't sure how else the log might get used. Personally I'd rather see it removed completely (or maybe only available through an internal flag?).
I don't really like the idea of adding an option for disabling a feature no one uses. Especially considering the biggest hurdle to adopting webpack is the config.
I don't mind doing the work though if we can find a reasonable solution.
from enhanced-resolve.
I agree I think we should just have it as part of our test fixtures and local Dev if needed. It is very helpful for resolver plugin Dev also.
from enhanced-resolve.
If you run webpack
programatically, you can use this workaround (prior to requiring webpack
) to get the above mentioned speed bump:
// useful Webpack performance benefit until this is resolved: https://github.com/webpack/enhanced-resolve/issues/88
const Module = require('module')
function createCallbackMock(callback, options, message, messageOptional) {
return function callbackMock() {
// eslint-disable-next-line prefer-rest-params
return callback.apply(this, arguments)
}
}
// magic for mocking modules
const originalLoad = Module._load
function mockModuleLoader(...mocks) {
Module._load = function load(request, parent, isMain) {
for (const mock of mocks) {
const mockedModuleExports = mock(request, parent, isMain)
if (mockedModuleExports !== undefined) {
return mockedModuleExports
}
}
return originalLoad.apply(undefined, arguments)
}
}
// let's mock the 'createInnerCallback' file:
const createCallbackRegExp = /\/enhanced-resolve\/lib\/createInnerCallback.js$/
mockModuleLoader(
(request, parent, isMain) => {
const filename = Module._resolveFilename(request, parent, isMain)
return createCallbackRegExp.test(filename) ? createCallbackMock : undefined
}
)
This effectively replaces the module.exports
of the createInnerCallback.js
file with a dummy method.
from enhanced-resolve.
Actually now that I think about this, we could leave as an empty fn and patch the logger when needed.
from enhanced-resolve.
I like that approach in general; it pushes all the perf cost to the error path, which doesn't matter if it's fast or not.
from enhanced-resolve.
OK, so it seems like we make a new function like doResolveWithLogging
that'll call doResolve
and on error, recall doResolve
with the createInnerCallback
version attached?
from enhanced-resolve.
That sounds right to me.
from enhanced-resolve.
Related Issues (20)
- virtual module not found error HOT 1
- add type defines for `CachedInputFileSystem` ? HOT 5
- CachedInputFileSystem OOM when duration is infinity HOT 5
- signature of method `stat` in interface `FileSystem` mismatches. HOT 2
- bug: exports map key with star in the middle doesn't work HOT 1
- is this possible with webpack AliasPlugin to automatically switch to a different alias when original file is deleted? HOT 7
- can't resolve exports pattern startsWith wildcards HOT 1
- Use of `extensionAlias` fails resolution of subpath exports in `exports` fields HOT 2
- resolving packages entrypoints with a non-standard node_modules HOT 4
- `exports.types` after `exports.default` HOT 5
- Hooks do not fire events from CSS/SCSS imports HOT 6
- AliasPlugin crash when file is deleted or rename (have to restart to make it work)
- Seeing "Error: No file content" for different package.json files when webpack rebuilds HOT 1
- ESM: Resolving to the wrong package with `exports` and nested same package but different versions HOT 3
- ESM: package.exports array target not conforming to the ESM specification HOT 10
- Add ability to handle win32 relative paths HOT 4
- [Feature Request]: Support resolve the modules with hard-links HOT 4
- lstat error when requiring virtual modules HOT 1
- Can i use withOptions Api ? HOT 1
- File Extension Substitution for TypeScript Support HOT 18
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 enhanced-resolve.