improve experiments.mjs to be more compatibly with node.js ESM
- add support for `type: "module"` in package.json
- add support for `*.cjs`
- enable strict ESM for data uris with `text/javascript` or `application/javascript`
- disallow not fully specified requests in imports `*.mjs` or `type: "module"`
add `descriptionData` rule condition to match package.json info
fix passing resolveOptions along context modules
webpack supports Node.js 10.13.0 as minimum Node.js version now.
Node.js 10.13.0 provides recursive option for fs.mkdirSync.
So, mkdirp package is not needed.
add Compiler.intermediateFileSystem
avoid using `path` and `fs` module when possible
move `join`, `mkdirp` and `dirname` into utils
join and dirname is optional in FileSystem interface
remove mkdirp from Filesystem interface
Use deterministic mangled names for exports
refactor assignDeterministicIds
rename __webpack_init__ function in wasm to ""
fix bug with incorrectly cached StaticExportsDependency
fix bug in hash logic of Module
Some history:
* `uglifyjs-webpack-plugin` < v1.0 used the minifier `uglify-js`
* however `uglify-js` does not support ES6, which resulted in a fork
called `uglify-es` that was developed in the `uglify-js` repository,
but under the `harmony` branch
* `uglifyjs-webpack-plugin` v1.x switched to `uglify-es` for ES6 support
* however `uglify-es` stopped being maintained:
https://github.com/mishoo/UglifyJS2/issues/3156#issuecomment-392943058
* which led to a fork called `terser` that has incorporated all of
the unmerged PRs and will be where all new development occurs:
https://github.com/fabiosantoscode/terser
* `terser-webpack-plugin` was created, which is the `terser` equivalent
of `uglifyjs-webpack-plugin`:
https://github.com/webpack-contrib/terser-webpack-plugin
* `uglifyjs-webpack-plugin` v2.x will be switching back to `uglify-js`,
so any project that needs to support ES6 now needs to switch to
`terser-webpack-plugin`.
Fixes#7923.
Some history:
* `uglifyjs-webpack-plugin` < v1.0 used the minifier `uglify-js`
* however `uglify-js` does not support ES6, which resulted in a fork
called `uglify-es` that was developed in the `uglify-js` repository,
but under the `harmony` branch
* `uglifyjs-webpack-plugin` v1.x switched to `uglify-es` for ES6 support
* however `uglify-es` stopped being maintained:
https://github.com/mishoo/UglifyJS2/issues/3156#issuecomment-392943058
* which led to a fork called `terser` that has incorporated all of
the unmerged PRs and will be where all new development occurs:
https://github.com/fabiosantoscode/terser
* `terser-webpack-plugin` was created, which is the `terser` equivalent
of `uglifyjs-webpack-plugin`:
https://github.com/webpack-contrib/terser-webpack-plugin
* `uglifyjs-webpack-plugin` v2.x will be switching back to `uglify-js`,
so any project that needs to support ES6 now needs to switch to
`terser-webpack-plugin`.
Fixes#7923.