# Webpack Deep Scope Analysis Plugin  [](https://badge.fury.io/js/webpack-deep-scope-plugin) A webpack plugin for deep scope analysis. It's a project of [GSoC 2018](https://summerofcode.withgoogle.com/organizations/4657420148670464/#projects) webpack organization. **It's a plugin to improve tree-shaking.** It can make webpack eliminate the unused imports related to the unused exports. It solves the issue [6254](https://github.com/webpack/webpack/issues/6264) for webpack. Student: [@Vincent](https://github.com/vincentdchan) Mentor: [@Tobias](https://github.com/sokra) Demo: [https://vincentdchan.github.io/webpack-deep-scope-demo/](https://vincentdchan.github.io/webpack-deep-scope-demo/) # Install Install the plugin: ```bash $ yarn add webpack-deep-scope-plugin ``` ## Require - Node.js 8 \+ - webpack 4.14.0 \+ # Usage Enable the plugin in `webpack.config.js`: ```javascript const WebpackDeepScopeAnalysisPlugin = require('webpack-deep-scope-plugin').default; module.exports = { ..., plugins: [ ..., new WebpackDeepScopeAnalysisPlugin(), ], } ``` **Notice:** the plugin only works for `import` and `export` syntax module. If your code are transpiled to `module.export` and `require` syntax, the analyzer can't work correctly. The plugin will analyze the scope and determine if the variables should be imported automatically. ## Articles [Medium](https://medium.com/webpack/better-tree-shaking-with-deep-scope-analysis-a0b788c0ce77) [中文版](https://vincentdchan.github.io/2018/05/better-tree-shaking-with-scope-analysis/) ## Pure Annotation As you know, it's difficult for ECMAScript to analyze the side effects. Hence, `PURE` annotation is introduced, which is from [Uglify](https://github.com/mishoo/UglifyJS2): > A function call is marked as "pure" if a comment annotation /\*@\_\_PURE\_\_\*/ or /\*#\_\_PURE\_\_\*/ immediately precedes the call. For example: /\*@\_\_PURE\_\_\*/foo(); # Changelog ### v1.6.1 - Upgrade tslint for security issue - Fix: #12 : Add README to npm ### v1.6.0 - rename package *webpack-deep-scope-analysis* to *deep-scope-analyser*, which is published as a new npm package. It's aimed to be a standalone analyser. ### v1.5.4 - Fix [#7](https://github.com/vincentdchan/webpack-deep-scope-analysis-plugin/issues/7): `import * from 'xxx'` syntax ### v1.5.3 - Fix [#5](https://github.com/vincentdchan/webpack-deep-scope-analysis-plugin/issues/5) ### v1.5.2 - Improve performance and code quality ### v1.5.0 - Introduce `VirtualScope` to simulate module variable ### v1.4.0 - Fix #4 - Publish # Contributing Use `lerna` to build and test: ```sh $ lerna run build $ lerna run tslint $ lerna run test ``` # About Escope Now the `src/` includes a Typescript version of [escope](https://github.com/estools/escope), because the plugin needs some internal changes of the escope manager. So I didn't import the escope directly. When the plugin is nearly finished, I will make some PRs to the original escope repo.