Prevent unpredictable dependency hosting by explicitly resolve module path on webpack.ProvidePlugin (#20971)
Prevent unpredictable dependency hosting by explicitly resolve module path on webpack.ProvidePlugin (#20971)

ProvidePlugin replaces certain identifiers with another modules. As a result, 'buffer' and 'process' modules are added as implicit dependencies to all Next.js plugins. This can be problematic. With "Plug'n'Play" strategy, it don't work at all since they fail-fast with implicit dependencies. With "node_modules" strategy, it might seem OK but actually it can be result into unpredictable behavior since in uses dependency [hoisting](https://yarnpkg.com/advanced/lexicon#hoisting).

For example, currently users cannot use next-auth plugin with Plug'n'Play strategy:

![image](https://user-images.githubusercontent.com/4435445/103481517-d5547700-4e1e-11eb-9f23-bc2c9939418e.png)

This patch let Next.js properly handles such cases with `require.resolve`.

Closes https://github.com/vercel/next.js/issues/20955

###### References:
- https://github.com/nextauthjs/next-auth/pull/1034
JeromeFitz/next.js,zeit/next.js,flybayer/next.js,JeromeFitz/next.js,flybayer/next.js,azukaru/next.js,JeromeFitz/next.js,flybayer/next.js,azukaru/next.js,zeit/next.js,zeit/next.js,azukaru/next.js,azukaru/next.js,JeromeFitz/next.js,flybayer/next.js