├── .gitignore
├── README.md
├── code-splitting
├── .gitignore
├── README.md
├── build
│ ├── 1.1.js
│ ├── 2.2.js
│ └── index.js
├── index.html
├── package.json
├── src
│ ├── components
│ │ ├── body.js
│ │ ├── body2.js
│ │ ├── footer.js
│ │ └── header.js
│ └── index.js
└── webpack.config.js
├── dedupeplugin
├── .gitignore
├── README.md
├── build
│ └── index.js
├── package.json
├── src
│ ├── components
│ │ ├── a.js
│ │ ├── b.js
│ │ └── c.js
│ └── index.js
└── webpack.config.js
├── define-plugin
├── .gitignore
├── README.md
├── index.html
├── package.json
├── src
│ ├── components
│ │ ├── body.js
│ │ ├── footer.js
│ │ └── header.js
│ └── index.js
└── webpack.config.js
├── dll-bundles
├── .gitignore
├── README.md
├── dist
│ └── bunld.js
├── dll
│ ├── manifest.json
│ └── vendor.js
├── index.html
├── index.js
├── package.json
└── webpack.config.prod.js
├── externals
├── .gitignore
├── README.md
├── build
│ └── index.js
├── index.html
├── package.json
├── src
│ ├── components
│ │ ├── body.js
│ │ ├── footer.js
│ │ └── header.js
│ └── index.js
└── webpack.config.js
├── happypack
├── .gitignore
├── .happypack
│ ├── cache--1.json
│ ├── s--605522759
│ └── s--605522759.map
├── README.md
├── build
│ └── index.js
├── package.json
├── src
│ ├── components
│ │ ├── body.js
│ │ ├── footer.js
│ │ └── header.js
│ └── index.js
└── webpack.config.js
├── no-parse
├── .gitignore
├── README.md
├── build
│ └── index.js
├── index.html
├── package.json
├── src
│ ├── components
│ │ ├── body.js
│ │ ├── footer.js
│ │ └── header.js
│ └── index.js
└── webpack.config.js
├── parallel-webpack
├── .gitignore
├── README.md
├── build
│ ├── home.js
│ ├── item.js
│ └── list.js
├── package.json
├── src
│ ├── components
│ │ ├── body.js
│ │ ├── footer.js
│ │ └── header.js
│ └── container
│ │ ├── home.js
│ │ ├── item.js
│ │ └── list.js
└── webpack.config.js
├── prefetch-plugin
├── .gitignore
├── README.md
├── build
│ └── index.js
├── package.json
├── src
│ ├── components
│ │ ├── app.js
│ │ ├── header.js
│ │ └── nav.js
│ └── index.js
├── stat.json
└── webpack.config.js
├── tree-shaking
├── .gitignore
├── README.md
├── build
│ └── index.js
├── package.json
├── src
│ ├── components
│ │ ├── body.js
│ │ ├── footer.js
│ │ └── header.js
│ └── index.js
└── webpack.config.js
├── uglifyjs
├── .gitignore
├── README.md
├── build
│ └── index.js
├── index.html
├── package.json
├── src
│ └── index.js
└── webpack.config.js
└── webpack2.0
├── .gitignore
├── README.md
├── build
└── index.js
├── index.html
├── package.json
├── src
├── components
│ ├── body.js
│ ├── footer.js
│ └── header.js
└── index.js
└── webpack.config.js
/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules/**/*
2 | npm-debug.log
3 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Webpack Optimize Example
2 |
3 | Follow these examples to make your Webpack builds faster 🚀 and files smaller 🐜
4 |
5 | ## Examples
6 |
7 | * [code-splitting](https://github.com/FrendEr/webpack-optimize-example/tree/master/code-splitting)
8 | * [dedupeplugin](https://github.com/FrendEr/webpack-optimize-example/tree/master/dedupeplugin)
9 | * [define-plugin](https://github.com/FrendEr/webpack-optimize-example/tree/master/define-plugin)
10 | * [dll-bundles](https://github.com/FrendEr/webpack-optimize-example/tree/master/dll-bundles)
11 | * [externals](https://github.com/FrendEr/webpack-optimize-example/tree/master/externals)
12 | * [happypack](https://github.com/FrendEr/webpack-optimize-example/tree/master/happypack)
13 | * [no-parse](https://github.com/FrendEr/webpack-optimize-example/tree/master/no-parse)
14 | * [parallel-webpack](https://github.com/FrendEr/webpack-optimize-example/tree/master/parallel-webpack)
15 | * [prefetch-plugin](https://github.com/FrendEr/webpack-optimize-example/tree/master/prefetch-plugin)
16 | * [tree-shaking](https://github.com/FrendEr/webpack-optimize-example/tree/master/tree-shaking)
17 | * [uglifyjs](https://github.com/FrendEr/webpack-optimize-example/tree/master/uglifyjs)
18 | * [webpack2.0](https://github.com/FrendEr/webpack-optimize-example/tree/master/webpack2.0)
19 |
20 | ## How to run
21 |
22 | * checkout this repository
23 |
24 | ```
25 | git clone https://github.com/FrendEr/webpack-optimize-example.git
26 | ```
27 |
28 | * install dependencies
29 |
30 | ```
31 | cd ./exmaple && npm install
32 | ```
33 |
34 | * run build
35 |
36 | ```
37 | npm run build
38 | ```
39 |
40 | ## License
41 |
42 | MIT
43 |
--------------------------------------------------------------------------------
/code-splitting/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules/
2 |
--------------------------------------------------------------------------------
/code-splitting/README.md:
--------------------------------------------------------------------------------
1 | # Code Splitting
2 |
--------------------------------------------------------------------------------
/code-splitting/build/1.1.js:
--------------------------------------------------------------------------------
1 | webpackJsonp([1],{
2 |
3 | /***/ 3:
4 | /***/ function(module, exports) {
5 |
6 | 'use strict';
7 |
8 | Object.defineProperty(exports, "__esModule", {
9 | value: true
10 | });
11 | exports.default = 'body';
12 | module.exports = exports['default'];
13 |
14 | /***/ }
15 |
16 | });
--------------------------------------------------------------------------------
/code-splitting/build/2.2.js:
--------------------------------------------------------------------------------
1 | webpackJsonp([2],{
2 |
3 | /***/ 4:
4 | /***/ function(module, exports) {
5 |
6 | 'use strict';
7 |
8 | Object.defineProperty(exports, "__esModule", {
9 | value: true
10 | });
11 | exports.default = 'body2';
12 | module.exports = exports['default'];
13 |
14 | /***/ }
15 |
16 | });
--------------------------------------------------------------------------------
/code-splitting/build/index.js:
--------------------------------------------------------------------------------
1 | /******/ (function(modules) { // webpackBootstrap
2 | /******/ // install a JSONP callback for chunk loading
3 | /******/ var parentJsonpFunction = window["webpackJsonp"];
4 | /******/ window["webpackJsonp"] = function webpackJsonpCallback(chunkIds, moreModules) {
5 | /******/ // add "moreModules" to the modules object,
6 | /******/ // then flag all "chunkIds" as loaded and fire callback
7 | /******/ var moduleId, chunkId, i = 0, callbacks = [];
8 | /******/ for(;i < chunkIds.length; i++) {
9 | /******/ chunkId = chunkIds[i];
10 | /******/ if(installedChunks[chunkId])
11 | /******/ callbacks.push.apply(callbacks, installedChunks[chunkId]);
12 | /******/ installedChunks[chunkId] = 0;
13 | /******/ }
14 | /******/ for(moduleId in moreModules) {
15 | /******/ modules[moduleId] = moreModules[moduleId];
16 | /******/ }
17 | /******/ if(parentJsonpFunction) parentJsonpFunction(chunkIds, moreModules);
18 | /******/ while(callbacks.length)
19 | /******/ callbacks.shift().call(null, __webpack_require__);
20 |
21 | /******/ };
22 |
23 | /******/ // The module cache
24 | /******/ var installedModules = {};
25 |
26 | /******/ // object to store loaded and loading chunks
27 | /******/ // "0" means "already loaded"
28 | /******/ // Array means "loading", array contains callbacks
29 | /******/ var installedChunks = {
30 | /******/ 0:0
31 | /******/ };
32 |
33 | /******/ // The require function
34 | /******/ function __webpack_require__(moduleId) {
35 |
36 | /******/ // Check if module is in cache
37 | /******/ if(installedModules[moduleId])
38 | /******/ return installedModules[moduleId].exports;
39 |
40 | /******/ // Create a new module (and put it into the cache)
41 | /******/ var module = installedModules[moduleId] = {
42 | /******/ exports: {},
43 | /******/ id: moduleId,
44 | /******/ loaded: false
45 | /******/ };
46 |
47 | /******/ // Execute the module function
48 | /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
49 |
50 | /******/ // Flag the module as loaded
51 | /******/ module.loaded = true;
52 |
53 | /******/ // Return the exports of the module
54 | /******/ return module.exports;
55 | /******/ }
56 |
57 | /******/ // This file contains only the entry chunk.
58 | /******/ // The chunk loading function for additional chunks
59 | /******/ __webpack_require__.e = function requireEnsure(chunkId, callback) {
60 | /******/ // "0" is the signal for "already loaded"
61 | /******/ if(installedChunks[chunkId] === 0)
62 | /******/ return callback.call(null, __webpack_require__);
63 |
64 | /******/ // an array means "currently loading".
65 | /******/ if(installedChunks[chunkId] !== undefined) {
66 | /******/ installedChunks[chunkId].push(callback);
67 | /******/ } else {
68 | /******/ // start chunk loading
69 | /******/ installedChunks[chunkId] = [callback];
70 | /******/ var head = document.getElementsByTagName('head')[0];
71 | /******/ var script = document.createElement('script');
72 | /******/ script.type = 'text/javascript';
73 | /******/ script.charset = 'utf-8';
74 | /******/ script.async = true;
75 |
76 | /******/ script.src = __webpack_require__.p + "" + chunkId + "." + ({}[chunkId]||chunkId) + ".js";
77 | /******/ head.appendChild(script);
78 | /******/ }
79 | /******/ };
80 |
81 | /******/ // expose the modules object (__webpack_modules__)
82 | /******/ __webpack_require__.m = modules;
83 |
84 | /******/ // expose the module cache
85 | /******/ __webpack_require__.c = installedModules;
86 |
87 | /******/ // __webpack_public_path__
88 | /******/ __webpack_require__.p = "";
89 |
90 | /******/ // Load entry module and return exports
91 | /******/ return __webpack_require__(0);
92 | /******/ })
93 | /************************************************************************/
94 | /******/ ([
95 | /* 0 */
96 | /***/ function(module, exports, __webpack_require__) {
97 |
98 | 'use strict';
99 |
100 | var _header = __webpack_require__(1);
101 |
102 | var _header2 = _interopRequireDefault(_header);
103 |
104 | var _footer = __webpack_require__(2);
105 |
106 | var _footer2 = _interopRequireDefault(_footer);
107 |
108 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
109 |
110 | if (location.hash == '#body') {
111 | __webpack_require__.e/* require */(1, function(__webpack_require__) { var __WEBPACK_AMD_REQUIRE_ARRAY__ = []; (function (require) {
112 | var body = __webpack_require__(3);
113 | }.apply(null, __WEBPACK_AMD_REQUIRE_ARRAY__));});
114 | }
115 |
116 | if (location.hash == '#body2') {
117 | __webpack_require__.e/* require */(2, function(__webpack_require__) { var __WEBPACK_AMD_REQUIRE_ARRAY__ = []; (function (require) {
118 | var body = __webpack_require__(4);
119 | }.apply(null, __WEBPACK_AMD_REQUIRE_ARRAY__));});
120 | }
121 |
122 | /***/ },
123 | /* 1 */
124 | /***/ function(module, exports) {
125 |
126 | 'use strict';
127 |
128 | Object.defineProperty(exports, "__esModule", {
129 | value: true
130 | });
131 | exports.default = 'header';
132 | module.exports = exports['default'];
133 |
134 | /***/ },
135 | /* 2 */
136 | /***/ function(module, exports) {
137 |
138 | 'use strict';
139 |
140 | Object.defineProperty(exports, "__esModule", {
141 | value: true
142 | });
143 | exports.default = 'footer';
144 | module.exports = exports['default'];
145 |
146 | /***/ }
147 | /******/ ]);
--------------------------------------------------------------------------------
/code-splitting/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | code splitting
5 |
6 |
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/code-splitting/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "webpack-base",
3 | "version": "0.0.1",
4 | "description": "a webpack base repo",
5 | "main": "build/index.js",
6 | "scripts": {
7 | "clean": "rimraf ./build",
8 | "prebuild": "npm run clean",
9 | "build": "webpack --progress --profile"
10 | },
11 | "repository": {
12 | "type": "git",
13 | "url": "git+https://github.com/FrendEr/webpack-base.git"
14 | },
15 | "author": "FrendEr",
16 | "license": "MIT",
17 | "bugs": {
18 | "url": "https://github.com/FrendEr/webpack-base/issues"
19 | },
20 | "homepage": "https://github.com/FrendEr/webpack-base#readme",
21 | "devDependencies": {
22 | "babel-loader": "^6.2.4",
23 | "babel-plugin-add-module-exports": "^0.2.1",
24 | "babel-preset-es2015": "^6.9.0",
25 | "babel-preset-react": "^6.5.0",
26 | "babel-preset-stage-0": "^6.5.0",
27 | "extract-text-webpack-plugin": "^1.0.1",
28 | "rimraf": "^2.5.2",
29 | "webpack": "^1.13.1"
30 | },
31 | "dependencies": {
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/code-splitting/src/components/body.js:
--------------------------------------------------------------------------------
1 | export default 'body';
2 |
--------------------------------------------------------------------------------
/code-splitting/src/components/body2.js:
--------------------------------------------------------------------------------
1 | export default 'body2';
2 |
--------------------------------------------------------------------------------
/code-splitting/src/components/footer.js:
--------------------------------------------------------------------------------
1 | export default 'footer';
2 |
--------------------------------------------------------------------------------
/code-splitting/src/components/header.js:
--------------------------------------------------------------------------------
1 | export default 'header';
2 |
--------------------------------------------------------------------------------
/code-splitting/src/index.js:
--------------------------------------------------------------------------------
1 | import Header from './components/header';
2 | import Footer from './components/footer';
3 |
4 | if (location.hash == '#body') {
5 | require([], function(require) {
6 | let body = require('./components/body');
7 | });
8 | }
9 |
10 | if (location.hash == '#body2') {
11 | require([], function(require) {
12 | let body = require('./components/body2');
13 | });
14 | }
15 |
--------------------------------------------------------------------------------
/code-splitting/webpack.config.js:
--------------------------------------------------------------------------------
1 | const path = require('path');
2 |
3 | /**
4 | * loaders list
5 | */
6 | const loaders = [
7 | {
8 | test: /\.jsx?$/,
9 | exclude: /node_modules/,
10 | loader: 'babel-loader',
11 | query: {
12 | presets: ['react', 'es2015', 'stage-0'],
13 | plugins: ['add-module-exports']
14 | }
15 | }
16 | ];
17 |
18 | /**
19 | * plugins list
20 | */
21 | const plugins = [];
22 |
23 | module.exports = {
24 | entry: {
25 | index: path.join(__dirname, 'src/index.js')
26 | },
27 | output: {
28 | path: path.join(__dirname, 'build'),
29 | filename: '[name].js'
30 | },
31 | module: {
32 | loaders: loaders
33 | },
34 | plugins: plugins
35 | };
36 |
--------------------------------------------------------------------------------
/dedupeplugin/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules/
2 |
--------------------------------------------------------------------------------
/dedupeplugin/README.md:
--------------------------------------------------------------------------------
1 | # DedupePlugin
2 |
3 | ## 原理
4 |
5 | * `Webpack` 在编译文件的时候,会为每个文件生成一个 `hash` 值,如下面的代码
6 |
7 | ```
8 | // https://github.com/webpack/webpack/blob/master/lib/NormalModule.js#L312
9 | NormalModule.prototype.getSourceHash = function() {
10 | if(!this._source) return "";
11 | var hash = require("crypto").createHash("md5");
12 | hash.update(this._source.source());
13 | return hash.digest("hex");
14 | };
15 | ```
16 |
17 | 所以,不同的文件内容编译出来的 `hash` 值是不一样的。句末空格不会影响文件内容,但是制表符会产生影响。
18 |
19 | * `DedupePlugin` 插件在去重的时候,就是通过判断一个 `hash` 值对应的模块是否已经存在,存在则标记为重复
20 |
21 | ```
22 | // https://github.com/webpack/webpack/blob/master/lib/optimize/DedupePlugin.js#L23
23 | var dupModule = modulesByHash[hash];
24 | if(dupModule) {
25 | if(dupModule.duplicates) {
26 | dupModule.duplicates.push(module);
27 | module.duplicates = dupModule.duplicates;
28 | } else {
29 | allDups.push(module.duplicates = dupModule.duplicates = [dupModule, module]);
30 | }
31 | } else {
32 | modulesByHash[hash] = module;
33 | }
34 | ```
35 |
--------------------------------------------------------------------------------
/dedupeplugin/build/index.js:
--------------------------------------------------------------------------------
1 | /******/ (function(modules) { // webpackBootstrap
2 | /******/ // The module cache
3 | /******/ var installedModules = {};
4 |
5 | /******/ // The require function
6 | /******/ function __webpack_require__(moduleId) {
7 |
8 | /******/ // Check if module is in cache
9 | /******/ if(installedModules[moduleId])
10 | /******/ return installedModules[moduleId].exports;
11 |
12 | /******/ // Create a new module (and put it into the cache)
13 | /******/ var module = installedModules[moduleId] = {
14 | /******/ exports: {},
15 | /******/ id: moduleId,
16 | /******/ loaded: false
17 | /******/ };
18 |
19 | /******/ // Execute the module function
20 | /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
21 |
22 | /******/ // Flag the module as loaded
23 | /******/ module.loaded = true;
24 |
25 | /******/ // Return the exports of the module
26 | /******/ return module.exports;
27 | /******/ }
28 |
29 |
30 | /******/ // expose the modules object (__webpack_modules__)
31 | /******/ __webpack_require__.m = modules;
32 |
33 | /******/ // expose the module cache
34 | /******/ __webpack_require__.c = installedModules;
35 |
36 | /******/ // __webpack_public_path__
37 | /******/ __webpack_require__.p = "";
38 |
39 | /******/ // Load entry module and return exports
40 | /******/ return __webpack_require__(0);
41 | /******/ })
42 | /************************************************************************/
43 | /******/ ((function(modules) {
44 | // Check all modules for deduplicated modules
45 | for(var i in modules) {
46 | if(Object.prototype.hasOwnProperty.call(modules, i)) {
47 | switch(typeof modules[i]) {
48 | case "function": break;
49 | case "object":
50 | // Module can be created from a template
51 | modules[i] = (function(_m) {
52 | var args = _m.slice(1), fn = modules[_m[0]];
53 | return function (a,b,c) {
54 | fn.apply(this, [a,b,c].concat(args));
55 | };
56 | }(modules[i]));
57 | break;
58 | default:
59 | // Module is a copy of another module
60 | modules[i] = modules[modules[i]];
61 | break;
62 | }
63 | }
64 | }
65 | return modules;
66 | }([
67 | /* 0 */
68 | /***/ function(module, exports, __webpack_require__) {
69 |
70 | 'use strict';
71 |
72 | var _a = __webpack_require__(1);
73 |
74 | var _a2 = _interopRequireDefault(_a);
75 |
76 | var _b = __webpack_require__(3);
77 |
78 | var _b2 = _interopRequireDefault(_b);
79 |
80 | var _c = __webpack_require__(2);
81 |
82 | var _c2 = _interopRequireDefault(_c);
83 |
84 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
85 |
86 | /***/ },
87 | /* 1 */
88 | /***/ function(module, exports, __webpack_require__) {
89 |
90 | 'use strict';
91 |
92 | Object.defineProperty(exports, "__esModule", {
93 | value: true
94 | });
95 |
96 | var _c = __webpack_require__(2);
97 |
98 | var _c2 = _interopRequireDefault(_c);
99 |
100 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
101 |
102 | exports.default = 'a';
103 | module.exports = exports['default'];
104 |
105 | /***/ },
106 | /* 2 */
107 | /***/ function(module, exports) {
108 |
109 | 'use strict';
110 |
111 | Object.defineProperty(exports, "__esModule", {
112 | value: true
113 | });
114 | exports.default = 'b = c';
115 | module.exports = exports['default'];
116 |
117 | /***/ },
118 | /* 3 */
119 | 2
120 | /******/ ])));
--------------------------------------------------------------------------------
/dedupeplugin/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "webpack-base",
3 | "version": "0.0.1",
4 | "description": "a webpack base repo",
5 | "main": "index.js",
6 | "scripts": {
7 | "clean": "rimraf ./build",
8 | "prebuild": "npm run clean",
9 | "build": "webpack --progress --profile"
10 | },
11 | "repository": {
12 | "type": "git",
13 | "url": "git+https://github.com/FrendEr/webpack-base.git"
14 | },
15 | "author": "FrendEr",
16 | "license": "MIT",
17 | "bugs": {
18 | "url": "https://github.com/FrendEr/webpack-base/issues"
19 | },
20 | "homepage": "https://github.com/FrendEr/webpack-base#readme",
21 | "devDependencies": {
22 | "babel-loader": "^6.2.4",
23 | "babel-plugin-add-module-exports": "^0.2.1",
24 | "babel-preset-es2015": "^6.9.0",
25 | "babel-preset-react": "^6.5.0",
26 | "babel-preset-stage-0": "^6.5.0",
27 | "extract-text-webpack-plugin": "^1.0.1",
28 | "rimraf": "^2.5.2",
29 | "webpack": "^1.13.1"
30 | },
31 | "dependencies": {
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/dedupeplugin/src/components/a.js:
--------------------------------------------------------------------------------
1 | import c from './c';
2 | export default 'a';
3 |
--------------------------------------------------------------------------------
/dedupeplugin/src/components/b.js:
--------------------------------------------------------------------------------
1 | export default 'b = c';
2 |
--------------------------------------------------------------------------------
/dedupeplugin/src/components/c.js:
--------------------------------------------------------------------------------
1 | export default 'b = c';
2 |
--------------------------------------------------------------------------------
/dedupeplugin/src/index.js:
--------------------------------------------------------------------------------
1 | import a from './components/a';
2 | import b from './components/b';
3 | import c from './components/c';
4 |
--------------------------------------------------------------------------------
/dedupeplugin/webpack.config.js:
--------------------------------------------------------------------------------
1 | const path = require('path');
2 | const webpack = require('webpack');
3 |
4 | /**
5 | * loaders list
6 | */
7 | const loaders = [
8 | {
9 | test: /\.jsx?$/,
10 | exclude: /node_modules/,
11 | loader: 'babel-loader',
12 | query: {
13 | presets: ['react', 'es2015', 'stage-0'],
14 | plugins: ['add-module-exports']
15 | }
16 | }
17 | ];
18 |
19 | /**
20 | * plugins list
21 | */
22 | const plugins = [
23 | new webpack.optimize.DedupePlugin()
24 | ];
25 |
26 | module.exports = {
27 | entry: {
28 | index: path.join(__dirname, 'src/index.js')
29 | },
30 | output: {
31 | path: path.join(__dirname, 'build'),
32 | filename: '[name].js'
33 | },
34 | module: {
35 | loaders: loaders
36 | },
37 | plugins: plugins
38 | };
39 |
--------------------------------------------------------------------------------
/define-plugin/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules/
2 | build/
--------------------------------------------------------------------------------
/define-plugin/README.md:
--------------------------------------------------------------------------------
1 | # webpack.DefinePlugin
2 |
3 | Using DefinePlugin and setting the NODE_ENV to production will enable dead code elimination on conditionals in react core and shrink final bundle size
4 |
5 | This also works for your own code wrapped in process.env.NODE_ENV conditionals.
6 |
7 | Webpack must be run in production mode for this to work with `-p`
8 |
9 | ```
10 | // plugin
11 | new webpack.DefinePlugin({
12 | 'process.env': {
13 | 'NODE_ENV': '"production"'
14 | }
15 | })
16 | ```
17 |
18 | ```
19 | // package.json
20 | "scripts": {
21 | "clean": "rimraf ./build",
22 | "prebuild": "npm run clean",
23 | "build": "webpack -p --progress --profile"
24 | },
25 | ```
26 |
27 | More info here: https://github.com/petehunt/webpack-howto#6-feature-flags
--------------------------------------------------------------------------------
/define-plugin/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | DefinePlugin Example
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/define-plugin/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "webpack-base",
3 | "version": "0.0.1",
4 | "description": "a webpack base repo",
5 | "main": "build/index.js",
6 | "scripts": {
7 | "clean": "rimraf ./build",
8 | "prebuild": "npm run clean",
9 | "buildNonProd": "webpack --progress --profile",
10 | "build": "webpack -p --progress --profile"
11 | },
12 | "repository": {
13 | "type": "git",
14 | "url": "git+https://github.com/FrendEr/webpack-base.git"
15 | },
16 | "author": "FrendEr",
17 | "license": "MIT",
18 | "bugs": {
19 | "url": "https://github.com/FrendEr/webpack-base/issues"
20 | },
21 | "homepage": "https://github.com/FrendEr/webpack-base#readme",
22 | "devDependencies": {
23 | "babel-loader": "^6.2.4",
24 | "babel-plugin-add-module-exports": "^0.2.1",
25 | "babel-preset-es2015": "^6.9.0",
26 | "babel-preset-react": "^6.5.0",
27 | "babel-preset-stage-0": "^6.5.0",
28 | "extract-text-webpack-plugin": "^1.0.1",
29 | "rimraf": "^2.5.2",
30 | "webpack": "^1.13.1"
31 | },
32 | "dependencies": {
33 | "lodash": "^4.13.1",
34 | "react": "^15.1.0",
35 | "react-dom": "^15.1.0"
36 | }
37 | }
38 |
--------------------------------------------------------------------------------
/define-plugin/src/components/body.js:
--------------------------------------------------------------------------------
1 | export default 'body';
2 |
--------------------------------------------------------------------------------
/define-plugin/src/components/footer.js:
--------------------------------------------------------------------------------
1 | export default 'footer';
2 |
--------------------------------------------------------------------------------
/define-plugin/src/components/header.js:
--------------------------------------------------------------------------------
1 | export default 'header';
2 |
--------------------------------------------------------------------------------
/define-plugin/src/index.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import ReactDOM from 'react-dom';
3 | import lodash from 'lodash';
4 |
5 | if (process.env.NODE_ENV === 'dev') {
6 | console.log('this will be removed on prod build')
7 | }
8 |
9 | ReactDOM.render(
10 | Hello World!,
11 | document.getElementById('app')
12 | );
13 |
--------------------------------------------------------------------------------
/define-plugin/webpack.config.js:
--------------------------------------------------------------------------------
1 | const path = require('path');
2 | const webpack = require('webpack');
3 | /**
4 | * loaders list
5 | */
6 | const loaders = [
7 | {
8 | test: /\.jsx?$/,
9 | exclude: /node_modules/,
10 | loader: 'babel-loader',
11 | query: {
12 | presets: ['react', 'es2015', 'stage-0'],
13 | plugins: ['add-module-exports']
14 | }
15 | }
16 | ];
17 |
18 | /**
19 | * plugins list
20 | */
21 | const plugins = [
22 | new webpack.DefinePlugin({
23 | 'process.env': {
24 | 'NODE_ENV': '"production"'
25 | }
26 | })
27 | ];
28 |
29 | module.exports = {
30 | entry: {
31 | index: path.join(__dirname, 'src/index.js')
32 | },
33 | output: {
34 | path: path.join(__dirname, 'build'),
35 | filename: '[name].js'
36 | },
37 | module: {
38 | loaders: loaders,
39 | noParse: [
40 | /lodash/
41 | ]
42 | },
43 | plugins: plugins,
44 | };
45 |
--------------------------------------------------------------------------------
/dll-bundles/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules/
2 |
--------------------------------------------------------------------------------
/dll-bundles/README.md:
--------------------------------------------------------------------------------
1 | # DLL Bundles
2 |
--------------------------------------------------------------------------------
/dll-bundles/dist/bunld.js:
--------------------------------------------------------------------------------
1 | /******/ (function(modules) { // webpackBootstrap
2 | /******/ // The module cache
3 | /******/ var installedModules = {};
4 |
5 | /******/ // The require function
6 | /******/ function __webpack_require__(moduleId) {
7 |
8 | /******/ // Check if module is in cache
9 | /******/ if(installedModules[moduleId])
10 | /******/ return installedModules[moduleId].exports;
11 |
12 | /******/ // Create a new module (and put it into the cache)
13 | /******/ var module = installedModules[moduleId] = {
14 | /******/ exports: {},
15 | /******/ id: moduleId,
16 | /******/ loaded: false
17 | /******/ };
18 |
19 | /******/ // Execute the module function
20 | /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
21 |
22 | /******/ // Flag the module as loaded
23 | /******/ module.loaded = true;
24 |
25 | /******/ // Return the exports of the module
26 | /******/ return module.exports;
27 | /******/ }
28 |
29 |
30 | /******/ // expose the modules object (__webpack_modules__)
31 | /******/ __webpack_require__.m = modules;
32 |
33 | /******/ // expose the module cache
34 | /******/ __webpack_require__.c = installedModules;
35 |
36 | /******/ // __webpack_public_path__
37 | /******/ __webpack_require__.p = "";
38 |
39 | /******/ // Load entry module and return exports
40 | /******/ return __webpack_require__(0);
41 | /******/ })
42 | /************************************************************************/
43 | /******/ ([
44 | /* 0 */
45 | /***/ function(module, exports, __webpack_require__) {
46 |
47 | 'use strict';
48 |
49 | var _react = __webpack_require__(1);
50 |
51 | var _react2 = _interopRequireDefault(_react);
52 |
53 | var _reactDom = __webpack_require__(3);
54 |
55 | var _reactDom2 = _interopRequireDefault(_reactDom);
56 |
57 | var _lodash = __webpack_require__(4);
58 |
59 | var _lodash2 = _interopRequireDefault(_lodash);
60 |
61 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
62 |
63 | _reactDom2.default.render(_react2.default.createElement(
64 | 'div',
65 | null,
66 | _react2.default.createElement(
67 | 'span',
68 | null,
69 | 'Hello World'
70 | )
71 | ), document.getElementById('app'));
72 |
73 | /***/ },
74 | /* 1 */
75 | /***/ function(module, exports, __webpack_require__) {
76 |
77 | module.exports = (__webpack_require__(2))(1);
78 |
79 | /***/ },
80 | /* 2 */
81 | /***/ function(module, exports) {
82 |
83 | module.exports = vendor_dll;
84 |
85 | /***/ },
86 | /* 3 */
87 | /***/ function(module, exports, __webpack_require__) {
88 |
89 | module.exports = (__webpack_require__(2))(38);
90 |
91 | /***/ },
92 | /* 4 */
93 | /***/ function(module, exports, __webpack_require__) {
94 |
95 | module.exports = (__webpack_require__(2))(168);
96 |
97 | /***/ }
98 | /******/ ]);
--------------------------------------------------------------------------------
/dll-bundles/dll/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "vendor_dll",
3 | "content": {
4 | "./node_modules/react/react.js": 1,
5 | "./node_modules/react/lib/React.js": 2,
6 | "./node_modules/webpack/node_modules/node-libs-browser/node_modules/process/browser.js": 3,
7 | "./node_modules/object-assign/index.js": 4,
8 | "./node_modules/react/lib/ReactChildren.js": 5,
9 | "./node_modules/react/lib/PooledClass.js": 6,
10 | "./node_modules/fbjs/lib/invariant.js": 7,
11 | "./node_modules/react/lib/ReactElement.js": 8,
12 | "./node_modules/react/lib/ReactCurrentOwner.js": 9,
13 | "./node_modules/fbjs/lib/warning.js": 10,
14 | "./node_modules/fbjs/lib/emptyFunction.js": 11,
15 | "./node_modules/react/lib/canDefineProperty.js": 12,
16 | "./node_modules/react/lib/traverseAllChildren.js": 13,
17 | "./node_modules/react/lib/getIteratorFn.js": 14,
18 | "./node_modules/react/lib/KeyEscapeUtils.js": 15,
19 | "./node_modules/react/lib/ReactComponent.js": 16,
20 | "./node_modules/react/lib/ReactNoopUpdateQueue.js": 17,
21 | "./node_modules/react/lib/ReactInstrumentation.js": 18,
22 | "./node_modules/react/lib/ReactDebugTool.js": 19,
23 | "./node_modules/fbjs/lib/ExecutionEnvironment.js": 20,
24 | "./node_modules/fbjs/lib/performanceNow.js": 21,
25 | "./node_modules/fbjs/lib/performance.js": 22,
26 | "./node_modules/react/lib/ReactInvalidSetStateWarningDevTool.js": 23,
27 | "./node_modules/react/lib/ReactNativeOperationHistoryDevtool.js": 24,
28 | "./node_modules/react/lib/ReactComponentTreeDevtool.js": 25,
29 | "./node_modules/fbjs/lib/emptyObject.js": 26,
30 | "./node_modules/react/lib/ReactClass.js": 27,
31 | "./node_modules/react/lib/ReactPropTypeLocations.js": 28,
32 | "./node_modules/fbjs/lib/keyMirror.js": 29,
33 | "./node_modules/react/lib/ReactPropTypeLocationNames.js": 30,
34 | "./node_modules/fbjs/lib/keyOf.js": 31,
35 | "./node_modules/react/lib/ReactDOMFactories.js": 32,
36 | "./node_modules/react/lib/ReactElementValidator.js": 33,
37 | "./node_modules/fbjs/lib/mapObject.js": 34,
38 | "./node_modules/react/lib/ReactPropTypes.js": 35,
39 | "./node_modules/react/lib/ReactVersion.js": 36,
40 | "./node_modules/react/lib/onlyChild.js": 37,
41 | "./node_modules/react-dom/index.js": 38,
42 | "./node_modules/react/lib/ReactDOM.js": 39,
43 | "./node_modules/react/lib/ReactDOMComponentTree.js": 40,
44 | "./node_modules/react/lib/DOMProperty.js": 41,
45 | "./node_modules/react/lib/ReactDOMComponentFlags.js": 42,
46 | "./node_modules/react/lib/ReactDefaultInjection.js": 43,
47 | "./node_modules/react/lib/BeforeInputEventPlugin.js": 44,
48 | "./node_modules/react/lib/EventConstants.js": 45,
49 | "./node_modules/react/lib/EventPropagators.js": 46,
50 | "./node_modules/react/lib/EventPluginHub.js": 47,
51 | "./node_modules/react/lib/EventPluginRegistry.js": 48,
52 | "./node_modules/react/lib/EventPluginUtils.js": 49,
53 | "./node_modules/react/lib/ReactErrorUtils.js": 50,
54 | "./node_modules/react/lib/accumulateInto.js": 51,
55 | "./node_modules/react/lib/forEachAccumulated.js": 52,
56 | "./node_modules/react/lib/FallbackCompositionState.js": 53,
57 | "./node_modules/react/lib/getTextContentAccessor.js": 54,
58 | "./node_modules/react/lib/SyntheticCompositionEvent.js": 55,
59 | "./node_modules/react/lib/SyntheticEvent.js": 56,
60 | "./node_modules/react/lib/SyntheticInputEvent.js": 57,
61 | "./node_modules/react/lib/ChangeEventPlugin.js": 58,
62 | "./node_modules/react/lib/ReactUpdates.js": 59,
63 | "./node_modules/react/lib/CallbackQueue.js": 60,
64 | "./node_modules/react/lib/ReactFeatureFlags.js": 61,
65 | "./node_modules/react/lib/ReactReconciler.js": 62,
66 | "./node_modules/react/lib/ReactRef.js": 63,
67 | "./node_modules/react/lib/ReactOwner.js": 64,
68 | "./node_modules/react/lib/Transaction.js": 65,
69 | "./node_modules/react/lib/getEventTarget.js": 66,
70 | "./node_modules/react/lib/isEventSupported.js": 67,
71 | "./node_modules/react/lib/isTextInputElement.js": 68,
72 | "./node_modules/react/lib/DefaultEventPluginOrder.js": 69,
73 | "./node_modules/react/lib/EnterLeaveEventPlugin.js": 70,
74 | "./node_modules/react/lib/SyntheticMouseEvent.js": 71,
75 | "./node_modules/react/lib/SyntheticUIEvent.js": 72,
76 | "./node_modules/react/lib/ViewportMetrics.js": 73,
77 | "./node_modules/react/lib/getEventModifierState.js": 74,
78 | "./node_modules/react/lib/HTMLDOMPropertyConfig.js": 75,
79 | "./node_modules/react/lib/ReactComponentBrowserEnvironment.js": 76,
80 | "./node_modules/react/lib/DOMChildrenOperations.js": 77,
81 | "./node_modules/react/lib/DOMLazyTree.js": 78,
82 | "./node_modules/react/lib/DOMNamespaces.js": 79,
83 | "./node_modules/react/lib/createMicrosoftUnsafeLocalFunction.js": 80,
84 | "./node_modules/react/lib/setTextContent.js": 81,
85 | "./node_modules/react/lib/escapeTextContentForBrowser.js": 82,
86 | "./node_modules/react/lib/setInnerHTML.js": 83,
87 | "./node_modules/react/lib/Danger.js": 84,
88 | "./node_modules/fbjs/lib/createNodesFromMarkup.js": 85,
89 | "./node_modules/fbjs/lib/createArrayFromMixed.js": 86,
90 | "./node_modules/fbjs/lib/getMarkupWrap.js": 87,
91 | "./node_modules/react/lib/ReactMultiChildUpdateTypes.js": 88,
92 | "./node_modules/react/lib/ReactDOMIDOperations.js": 89,
93 | "./node_modules/react/lib/ReactDOMComponent.js": 90,
94 | "./node_modules/react/lib/AutoFocusUtils.js": 91,
95 | "./node_modules/fbjs/lib/focusNode.js": 92,
96 | "./node_modules/react/lib/CSSPropertyOperations.js": 93,
97 | "./node_modules/react/lib/CSSProperty.js": 94,
98 | "./node_modules/fbjs/lib/camelizeStyleName.js": 95,
99 | "./node_modules/fbjs/lib/camelize.js": 96,
100 | "./node_modules/react/lib/dangerousStyleValue.js": 97,
101 | "./node_modules/fbjs/lib/hyphenateStyleName.js": 98,
102 | "./node_modules/fbjs/lib/hyphenate.js": 99,
103 | "./node_modules/fbjs/lib/memoizeStringOnly.js": 100,
104 | "./node_modules/react/lib/DOMPropertyOperations.js": 101,
105 | "./node_modules/react/lib/ReactDOMInstrumentation.js": 102,
106 | "./node_modules/react/lib/ReactDOMDebugTool.js": 103,
107 | "./node_modules/react/lib/ReactDOMUnknownPropertyDevtool.js": 104,
108 | "./node_modules/react/lib/quoteAttributeValueForBrowser.js": 105,
109 | "./node_modules/react/lib/ReactBrowserEventEmitter.js": 106,
110 | "./node_modules/react/lib/ReactEventEmitterMixin.js": 107,
111 | "./node_modules/react/lib/getVendorPrefixedEventName.js": 108,
112 | "./node_modules/react/lib/ReactDOMButton.js": 109,
113 | "./node_modules/react/lib/DisabledInputUtils.js": 110,
114 | "./node_modules/react/lib/ReactDOMInput.js": 111,
115 | "./node_modules/react/lib/LinkedValueUtils.js": 112,
116 | "./node_modules/react/lib/ReactDOMOption.js": 113,
117 | "./node_modules/react/lib/ReactDOMSelect.js": 114,
118 | "./node_modules/react/lib/ReactDOMTextarea.js": 115,
119 | "./node_modules/react/lib/ReactMultiChild.js": 116,
120 | "./node_modules/react/lib/ReactComponentEnvironment.js": 117,
121 | "./node_modules/react/lib/ReactChildReconciler.js": 118,
122 | "./node_modules/react/lib/instantiateReactComponent.js": 119,
123 | "./node_modules/react/lib/ReactCompositeComponent.js": 120,
124 | "./node_modules/react/lib/ReactInstanceMap.js": 121,
125 | "./node_modules/react/lib/ReactNodeTypes.js": 122,
126 | "./node_modules/react/lib/ReactUpdateQueue.js": 123,
127 | "./node_modules/react/lib/shouldUpdateReactComponent.js": 124,
128 | "./node_modules/react/lib/ReactEmptyComponent.js": 125,
129 | "./node_modules/react/lib/ReactNativeComponent.js": 126,
130 | "./node_modules/react/lib/flattenChildren.js": 127,
131 | "./node_modules/react/lib/ReactServerRenderingTransaction.js": 128,
132 | "./node_modules/fbjs/lib/shallowEqual.js": 129,
133 | "./node_modules/react/lib/validateDOMNesting.js": 130,
134 | "./node_modules/react/lib/ReactDOMEmptyComponent.js": 131,
135 | "./node_modules/react/lib/ReactDOMTreeTraversal.js": 132,
136 | "./node_modules/react/lib/ReactDOMTextComponent.js": 133,
137 | "./node_modules/react/lib/ReactDefaultBatchingStrategy.js": 134,
138 | "./node_modules/react/lib/ReactEventListener.js": 135,
139 | "./node_modules/fbjs/lib/EventListener.js": 136,
140 | "./node_modules/fbjs/lib/getUnboundedScrollPosition.js": 137,
141 | "./node_modules/react/lib/ReactInjection.js": 138,
142 | "./node_modules/react/lib/ReactReconcileTransaction.js": 139,
143 | "./node_modules/react/lib/ReactInputSelection.js": 140,
144 | "./node_modules/react/lib/ReactDOMSelection.js": 141,
145 | "./node_modules/react/lib/getNodeForCharacterOffset.js": 142,
146 | "./node_modules/fbjs/lib/containsNode.js": 143,
147 | "./node_modules/fbjs/lib/isTextNode.js": 144,
148 | "./node_modules/fbjs/lib/isNode.js": 145,
149 | "./node_modules/fbjs/lib/getActiveElement.js": 146,
150 | "./node_modules/react/lib/SVGDOMPropertyConfig.js": 147,
151 | "./node_modules/react/lib/SelectEventPlugin.js": 148,
152 | "./node_modules/react/lib/SimpleEventPlugin.js": 149,
153 | "./node_modules/react/lib/SyntheticAnimationEvent.js": 150,
154 | "./node_modules/react/lib/SyntheticClipboardEvent.js": 151,
155 | "./node_modules/react/lib/SyntheticFocusEvent.js": 152,
156 | "./node_modules/react/lib/SyntheticKeyboardEvent.js": 153,
157 | "./node_modules/react/lib/getEventCharCode.js": 154,
158 | "./node_modules/react/lib/getEventKey.js": 155,
159 | "./node_modules/react/lib/SyntheticDragEvent.js": 156,
160 | "./node_modules/react/lib/SyntheticTouchEvent.js": 157,
161 | "./node_modules/react/lib/SyntheticTransitionEvent.js": 158,
162 | "./node_modules/react/lib/SyntheticWheelEvent.js": 159,
163 | "./node_modules/react/lib/ReactMount.js": 160,
164 | "./node_modules/react/lib/ReactDOMContainerInfo.js": 161,
165 | "./node_modules/react/lib/ReactDOMFeatureFlags.js": 162,
166 | "./node_modules/react/lib/ReactMarkupChecksum.js": 163,
167 | "./node_modules/react/lib/adler32.js": 164,
168 | "./node_modules/react/lib/findDOMNode.js": 165,
169 | "./node_modules/react/lib/getNativeComponentFromComposite.js": 166,
170 | "./node_modules/react/lib/renderSubtreeIntoContainer.js": 167,
171 | "./node_modules/lodash/lodash.js": 168,
172 | "./node_modules/webpack/buildin/module.js": 169
173 | }
174 | }
--------------------------------------------------------------------------------
/dll-bundles/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | DLL Bundles Example
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/dll-bundles/index.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import ReactDOM from 'react-dom';
3 | import _ from 'lodash';
4 |
5 | ReactDOM.render(
6 |
7 | Hello World
8 |
,
9 | document.getElementById('app')
10 | );
11 |
--------------------------------------------------------------------------------
/dll-bundles/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "webpack-dll-example",
3 | "version": "1.0.0",
4 | "description": "",
5 | "main": "dist/bunld.js",
6 | "scripts": {
7 | "clean": "rimraf ./dist ./dll npm-debug.log",
8 | "dll": "MAKE_DLL=1 webpack --config webpack.config.prod.js",
9 | "prebuild": "npm run clean && npm run dll",
10 | "build": "webpack --config webpack.config.prod.js"
11 | },
12 | "author": "",
13 | "license": "MIT",
14 | "devDependencies": {
15 | "babel-loader": "^6.2.4",
16 | "babel-preset-es2015": "^6.9.0",
17 | "babel-preset-react": "^6.5.0",
18 | "rimraf": "^2.5.2",
19 | "webpack": "~1.13.0"
20 | },
21 | "dependencies": {
22 | "jquery": "^3.0.0",
23 | "lodash": "^4.13.1",
24 | "react": "^15.1.0",
25 | "react-dom": "^15.1.0"
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/dll-bundles/webpack.config.prod.js:
--------------------------------------------------------------------------------
1 | var path = require('path');
2 | var webpack = require('webpack');
3 |
4 | var exp = {};
5 | var loaders = [
6 | {
7 | test: /\.jsx?$/,
8 | exclude: /node_modules/,
9 | loader: 'babel',
10 | query: {
11 | presets: ['es2015', 'react'],
12 | cacheDirectory: true
13 | }
14 | }
15 | ];
16 |
17 | if (process.env.MAKE_DLL) {
18 | exp = {
19 | entry: {
20 | vendor: [
21 | 'react',
22 | 'react-dom',
23 | 'lodash'
24 | ]
25 | },
26 | output: {
27 | path: path.join(__dirname, 'dll'),
28 | filename: '[name].js',
29 | library: '[name]_dll'
30 | },
31 | plugins: [
32 | new webpack.DllPlugin({
33 | path: path.join(__dirname, 'dll', 'manifest.json'),
34 | name: '[name]_dll'
35 | })
36 | ],
37 | module: {
38 | loaders: loaders
39 | }
40 | };
41 | } else {
42 | exp = {
43 | entry: './index.js',
44 | output: {
45 | path: path.join(__dirname, 'dist'),
46 | filename: 'bunld.js',
47 | },
48 | plugins: [
49 | new webpack.DllReferencePlugin({
50 | context: '.',
51 | manifest: require('./dll/manifest.json')
52 | })
53 | ],
54 | module: {
55 | loaders: loaders
56 | }
57 | };
58 | }
59 |
60 | module.exports = exp;
61 |
--------------------------------------------------------------------------------
/externals/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules/
2 |
--------------------------------------------------------------------------------
/externals/README.md:
--------------------------------------------------------------------------------
1 | # Externals
2 |
--------------------------------------------------------------------------------
/externals/build/index.js:
--------------------------------------------------------------------------------
1 | /******/ (function(modules) { // webpackBootstrap
2 | /******/ // The module cache
3 | /******/ var installedModules = {};
4 |
5 | /******/ // The require function
6 | /******/ function __webpack_require__(moduleId) {
7 |
8 | /******/ // Check if module is in cache
9 | /******/ if(installedModules[moduleId])
10 | /******/ return installedModules[moduleId].exports;
11 |
12 | /******/ // Create a new module (and put it into the cache)
13 | /******/ var module = installedModules[moduleId] = {
14 | /******/ exports: {},
15 | /******/ id: moduleId,
16 | /******/ loaded: false
17 | /******/ };
18 |
19 | /******/ // Execute the module function
20 | /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
21 |
22 | /******/ // Flag the module as loaded
23 | /******/ module.loaded = true;
24 |
25 | /******/ // Return the exports of the module
26 | /******/ return module.exports;
27 | /******/ }
28 |
29 |
30 | /******/ // expose the modules object (__webpack_modules__)
31 | /******/ __webpack_require__.m = modules;
32 |
33 | /******/ // expose the module cache
34 | /******/ __webpack_require__.c = installedModules;
35 |
36 | /******/ // __webpack_public_path__
37 | /******/ __webpack_require__.p = "";
38 |
39 | /******/ // Load entry module and return exports
40 | /******/ return __webpack_require__(0);
41 | /******/ })
42 | /************************************************************************/
43 | /******/ ([
44 | /* 0 */
45 | /***/ function(module, exports, __webpack_require__) {
46 |
47 | 'use strict';
48 |
49 | var _react = __webpack_require__(1);
50 |
51 | var _react2 = _interopRequireDefault(_react);
52 |
53 | var _reactDom = __webpack_require__(2);
54 |
55 | var _reactDom2 = _interopRequireDefault(_reactDom);
56 |
57 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
58 |
59 | _reactDom2.default.render(_react2.default.createElement(
60 | 'span',
61 | null,
62 | 'Hello World!'
63 | ), document.getElementById('app'));
64 |
65 | /***/ },
66 | /* 1 */
67 | /***/ function(module, exports) {
68 |
69 | module.exports = React;
70 |
71 | /***/ },
72 | /* 2 */
73 | /***/ function(module, exports) {
74 |
75 | module.exports = ReactDOM;
76 |
77 | /***/ }
78 | /******/ ]);
--------------------------------------------------------------------------------
/externals/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Externals Example
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/externals/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "webpack-base",
3 | "version": "0.0.1",
4 | "description": "a webpack base repo",
5 | "main": "build/index.js",
6 | "scripts": {
7 | "clean": "rimraf ./build",
8 | "prebuild": "npm run clean",
9 | "build": "webpack --progress --profile"
10 | },
11 | "repository": {
12 | "type": "git",
13 | "url": "git+https://github.com/FrendEr/webpack-base.git"
14 | },
15 | "author": "FrendEr",
16 | "license": "MIT",
17 | "bugs": {
18 | "url": "https://github.com/FrendEr/webpack-base/issues"
19 | },
20 | "homepage": "https://github.com/FrendEr/webpack-base#readme",
21 | "devDependencies": {
22 | "babel-loader": "^6.2.4",
23 | "babel-plugin-add-module-exports": "^0.2.1",
24 | "babel-preset-es2015": "^6.9.0",
25 | "babel-preset-react": "^6.5.0",
26 | "babel-preset-stage-0": "^6.5.0",
27 | "extract-text-webpack-plugin": "^1.0.1",
28 | "rimraf": "^2.5.2",
29 | "webpack": "^1.13.1"
30 | },
31 | "dependencies": {
32 | "react": "^15.1.0",
33 | "react-dom": "^15.1.0"
34 | }
35 | }
36 |
--------------------------------------------------------------------------------
/externals/src/components/body.js:
--------------------------------------------------------------------------------
1 | export default 'body';
2 |
--------------------------------------------------------------------------------
/externals/src/components/footer.js:
--------------------------------------------------------------------------------
1 | export default 'footer';
2 |
--------------------------------------------------------------------------------
/externals/src/components/header.js:
--------------------------------------------------------------------------------
1 | export default 'header';
2 |
--------------------------------------------------------------------------------
/externals/src/index.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import ReactDOM from 'react-dom';
3 |
4 | ReactDOM.render(
5 | Hello World!,
6 | document.getElementById('app')
7 | );
8 |
--------------------------------------------------------------------------------
/externals/webpack.config.js:
--------------------------------------------------------------------------------
1 | const path = require('path');
2 |
3 | /**
4 | * loaders list
5 | */
6 | const loaders = [
7 | {
8 | test: /\.jsx?$/,
9 | exclude: /node_modules/,
10 | loader: 'babel-loader',
11 | query: {
12 | presets: ['react', 'es2015', 'stage-0'],
13 | plugins: ['add-module-exports']
14 | }
15 | }
16 | ];
17 |
18 | /**
19 | * plugins list
20 | */
21 | const plugins = [];
22 |
23 | module.exports = {
24 | entry: {
25 | index: path.join(__dirname, 'src/index.js')
26 | },
27 | output: {
28 | path: path.join(__dirname, 'build'),
29 | filename: '[name].js'
30 | },
31 | module: {
32 | loaders: loaders
33 | },
34 | plugins: plugins,
35 | externals: {
36 | 'react': 'React',
37 | 'react-dom': 'ReactDOM'
38 | }
39 | };
40 |
--------------------------------------------------------------------------------
/happypack/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules/
2 |
--------------------------------------------------------------------------------
/happypack/.happypack/cache--1.json:
--------------------------------------------------------------------------------
1 | {"context":{"loaders":[{"path":"/Users/alibaba/Documents/kaian/github-repo/webpack-optimize-example/happypack/node_modules/babel-loader/index.js","query":"?presets[]=es2015,presets[]=react,presets[]=stage-0"}],"external":{}},"mtimes":{"/Users/alibaba/Documents/kaian/github-repo/webpack-optimize-example/happypack/src/index.js":{"mtime":1466092979000,"compiledPath":"/Users/alibaba/Documents/kaian/github-repo/webpack-optimize-example/happypack/.happypack/s--605522759"}}}
--------------------------------------------------------------------------------
/happypack/.happypack/s--605522759:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | var _react = require('react');
4 |
5 | var _react2 = _interopRequireDefault(_react);
6 |
7 | var _reactDom = require('react-dom');
8 |
9 | var _reactDom2 = _interopRequireDefault(_reactDom);
10 |
11 | var _lodash = require('lodash');
12 |
13 | var _lodash2 = _interopRequireDefault(_lodash);
14 |
15 | var _classnames = require('classnames');
16 |
17 | var _classnames2 = _interopRequireDefault(_classnames);
18 |
19 | var _rcAnimate = require('rc-animate');
20 |
21 | var _rcAnimate2 = _interopRequireDefault(_rcAnimate);
22 |
23 | var _rcSwipeout = require('rc-swipeout');
24 |
25 | var _rcSwipeout2 = _interopRequireDefault(_rcSwipeout);
26 |
27 | var _rcTable = require('rc-table');
28 |
29 | var _rcTable2 = _interopRequireDefault(_rcTable);
30 |
31 | var _rcCalendar = require('rc-calendar');
32 |
33 | var _rcCalendar2 = _interopRequireDefault(_rcCalendar);
34 |
35 | var _rcCheckbox = require('rc-checkbox');
36 |
37 | var _rcCheckbox2 = _interopRequireDefault(_rcCheckbox);
38 |
39 | var _rcTree = require('rc-tree');
40 |
41 | var _rcTree2 = _interopRequireDefault(_rcTree);
42 |
43 | var _rcUpload = require('rc-upload');
44 |
45 | var _rcUpload2 = _interopRequireDefault(_rcUpload);
46 |
47 | var _rcSelect = require('rc-select');
48 |
49 | var _rcSelect2 = _interopRequireDefault(_rcSelect);
50 |
51 | var _rcTooltip = require('rc-tooltip');
52 |
53 | var _rcTooltip2 = _interopRequireDefault(_rcTooltip);
54 |
55 | var _rcForm = require('rc-form');
56 |
57 | var _rcForm2 = _interopRequireDefault(_rcForm);
58 |
59 | var _rcDialog = require('rc-dialog');
60 |
61 | var _rcDialog2 = _interopRequireDefault(_rcDialog);
62 |
63 | var _rcSlider = require('rc-slider');
64 |
65 | var _rcSlider2 = _interopRequireDefault(_rcSlider);
66 |
67 | var _rcProgress = require('rc-progress');
68 |
69 | var _rcProgress2 = _interopRequireDefault(_rcProgress);
70 |
71 | var _rcRate = require('rc-rate');
72 |
73 | var _rcRate2 = _interopRequireDefault(_rcRate);
74 |
75 | var _rcTabs = require('rc-tabs');
76 |
77 | var _rcTabs2 = _interopRequireDefault(_rcTabs);
78 |
79 | var _rcMenu = require('rc-menu');
80 |
81 | var _rcMenu2 = _interopRequireDefault(_rcMenu);
82 |
83 | var _rcSteps = require('rc-steps');
84 |
85 | var _rcSteps2 = _interopRequireDefault(_rcSteps);
86 |
87 | var _rcDrawer = require('rc-drawer');
88 |
89 | var _rcDrawer2 = _interopRequireDefault(_rcDrawer);
90 |
91 | var _rcDropdown = require('rc-dropdown');
92 |
93 | var _rcDropdown2 = _interopRequireDefault(_rcDropdown);
94 |
95 | var _rcCollapse = require('rc-collapse');
96 |
97 | var _rcCollapse2 = _interopRequireDefault(_rcCollapse);
98 |
99 | var _rcPagination = require('rc-pagination');
100 |
101 | var _rcPagination2 = _interopRequireDefault(_rcPagination);
102 |
103 | var _rcNotification = require('rc-notification');
104 |
105 | var _rcNotification2 = _interopRequireDefault(_rcNotification);
106 |
107 | var _rcTimePicker = require('rc-time-picker');
108 |
109 | var _rcTimePicker2 = _interopRequireDefault(_rcTimePicker);
110 |
111 | var _rcPager = require('rc-pager');
112 |
113 | var _rcPager2 = _interopRequireDefault(_rcPager);
114 |
115 | var _rcRadio = require('rc-radio');
116 |
117 | var _rcRadio2 = _interopRequireDefault(_rcRadio);
118 |
119 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
--------------------------------------------------------------------------------
/happypack/.happypack/s--605522759.map:
--------------------------------------------------------------------------------
1 | null
--------------------------------------------------------------------------------
/happypack/README.md:
--------------------------------------------------------------------------------
1 | # HappyPack
2 |
--------------------------------------------------------------------------------
/happypack/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "webpack-base",
3 | "version": "0.0.1",
4 | "description": "a webpack base repo",
5 | "main": "build/index.js",
6 | "scripts": {
7 | "clean": "rimraf ./build",
8 | "prebuild": "npm run clean",
9 | "build": "webpack --progress --profile"
10 | },
11 | "repository": {
12 | "type": "git",
13 | "url": "git+https://github.com/FrendEr/webpack-base.git"
14 | },
15 | "author": "FrendEr",
16 | "license": "MIT",
17 | "bugs": {
18 | "url": "https://github.com/FrendEr/webpack-base/issues"
19 | },
20 | "homepage": "https://github.com/FrendEr/webpack-base#readme",
21 | "devDependencies": {
22 | "babel-loader": "^6.2.4",
23 | "babel-plugin-add-module-exports": "^0.2.1",
24 | "babel-preset-es2015": "^6.9.0",
25 | "babel-preset-react": "^6.5.0",
26 | "babel-preset-stage-0": "^6.5.0",
27 | "extract-text-webpack-plugin": "^1.0.1",
28 | "happypack": "^2.1.1",
29 | "rimraf": "^2.5.2",
30 | "webpack": "^1.13.1"
31 | },
32 | "dependencies": {
33 | "classnames": "^2.2.5",
34 | "lodash": "^4.13.1",
35 | "rc-animate": "^2.1.0",
36 | "rc-calendar": "^5.5.6",
37 | "rc-checkbox": "^1.4.0",
38 | "rc-collapse": "^1.6.3",
39 | "rc-dialog": "^6.1.0",
40 | "rc-drawer": "^0.4.0",
41 | "rc-dropdown": "^1.4.8",
42 | "rc-dropzone": "^1.1.3",
43 | "rc-form": "^0.17.1",
44 | "rc-menu": "^4.12.3",
45 | "rc-notification": "^1.3.4",
46 | "rc-pager": "^2.2.0",
47 | "rc-pagination": "^1.5.3",
48 | "rc-progress": "^1.0.4",
49 | "rc-radio": "^2.0.0",
50 | "rc-rate": "^1.1.2",
51 | "rc-select": "^6.4.6",
52 | "rc-slider": "^3.7.1",
53 | "rc-spider": "0.0.8",
54 | "rc-steps": "^2.1.3",
55 | "rc-swipeout": "^1.0.1",
56 | "rc-table": "^4.2.0",
57 | "rc-tabs": "^5.9.2",
58 | "rc-time-picker": "^1.1.4",
59 | "rc-tooltip": "^3.3.5",
60 | "rc-tree": "^1.3.2",
61 | "rc-upload": "^1.13.2",
62 | "react": "^15.1.0",
63 | "react-dom": "^15.1.0",
64 | "underscore": "^1.8.3"
65 | }
66 | }
67 |
--------------------------------------------------------------------------------
/happypack/src/components/body.js:
--------------------------------------------------------------------------------
1 | export default 'body';
2 |
--------------------------------------------------------------------------------
/happypack/src/components/footer.js:
--------------------------------------------------------------------------------
1 | export default 'footer';
2 |
--------------------------------------------------------------------------------
/happypack/src/components/header.js:
--------------------------------------------------------------------------------
1 | export default 'header';
2 |
--------------------------------------------------------------------------------
/happypack/src/index.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import ReactDOM from 'react-dom';
3 | import lodash from 'lodash';
4 | import classnames from 'classnames';
5 |
6 | import animate from 'rc-animate';
7 | import swipeout from 'rc-swipeout';
8 | import table from 'rc-table';
9 | import calendar from 'rc-calendar';
10 | import checkbox from 'rc-checkbox';
11 | import tree from 'rc-tree';
12 | import upload from 'rc-upload';
13 | import select from 'rc-select';
14 | import tooltip from 'rc-tooltip';
15 |
16 | import form from 'rc-form';
17 | import dialog from 'rc-dialog';
18 | import slider from 'rc-slider';
19 | import progress from 'rc-progress';
20 | import rate from 'rc-rate';
21 | import tabs from 'rc-tabs';
22 | import menu from 'rc-menu';
23 | import steps from 'rc-steps';
24 | import drawer from 'rc-drawer';
25 |
26 | import dropdown from 'rc-dropdown';
27 | import collapse from 'rc-collapse';
28 | import pagination from 'rc-pagination';
29 | import notification from 'rc-notification';
30 | import timePicker from 'rc-time-picker';
31 | import pager from 'rc-pager';
32 | import radio from 'rc-radio';
33 |
--------------------------------------------------------------------------------
/happypack/webpack.config.js:
--------------------------------------------------------------------------------
1 | const path = require('path');
2 | const webpack = require('webpack');
3 | const HappyPack = require('happypack');
4 |
5 | /**
6 | * loaders list
7 | */
8 | const loaders = [
9 | {
10 | test: /\.jsx?$/,
11 | exclude: /node_modules/,
12 | loader: 'happypack/loader'
13 | }
14 | ];
15 |
16 | /**
17 | * plugins list
18 | */
19 | const plugins = [
20 | new webpack.DefinePlugin({
21 | 'process.env': {
22 | 'NODE_ENV': JSON.stringify('production')
23 | }
24 | }),
25 | new webpack.optimize.DedupePlugin(),
26 | new webpack.optimize.UglifyJsPlugin({
27 | sourceMap: false,
28 | minimize: true,
29 | mangle: {
30 | except: ['functor']
31 | },
32 | compress: {
33 | drop_debugger: true,
34 | warnings: false,
35 | drop_console: true
36 | }
37 | }),
38 | new HappyPack({
39 | loaders: ['babel?presets[]=es2015,presets[]=react,presets[]=stage-0']
40 | })
41 | ];
42 |
43 | module.exports = [{
44 | entry: {
45 | index: path.join(__dirname, 'src/index.js')
46 | },
47 | output: {
48 | path: path.join(__dirname, 'build'),
49 | filename: '[name].js'
50 | },
51 | module: {
52 | loaders: loaders
53 | },
54 | plugins: plugins
55 | }];
56 |
--------------------------------------------------------------------------------
/no-parse/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules/
2 |
--------------------------------------------------------------------------------
/no-parse/README.md:
--------------------------------------------------------------------------------
1 | # NoParse
2 |
--------------------------------------------------------------------------------
/no-parse/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | NoParse Example
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/no-parse/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "webpack-base",
3 | "version": "0.0.1",
4 | "description": "a webpack base repo",
5 | "main": "build/index.js",
6 | "scripts": {
7 | "clean": "rimraf ./build",
8 | "prebuild": "npm run clean",
9 | "build": "webpack --progress --profile"
10 | },
11 | "repository": {
12 | "type": "git",
13 | "url": "git+https://github.com/FrendEr/webpack-base.git"
14 | },
15 | "author": "FrendEr",
16 | "license": "MIT",
17 | "bugs": {
18 | "url": "https://github.com/FrendEr/webpack-base/issues"
19 | },
20 | "homepage": "https://github.com/FrendEr/webpack-base#readme",
21 | "devDependencies": {
22 | "babel-loader": "^6.2.4",
23 | "babel-plugin-add-module-exports": "^0.2.1",
24 | "babel-preset-es2015": "^6.9.0",
25 | "babel-preset-react": "^6.5.0",
26 | "babel-preset-stage-0": "^6.5.0",
27 | "extract-text-webpack-plugin": "^1.0.1",
28 | "rimraf": "^2.5.2",
29 | "webpack": "^1.13.1"
30 | },
31 | "dependencies": {
32 | "lodash": "^4.13.1",
33 | "react": "^15.1.0",
34 | "react-dom": "^15.1.0"
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/no-parse/src/components/body.js:
--------------------------------------------------------------------------------
1 | export default 'body';
2 |
--------------------------------------------------------------------------------
/no-parse/src/components/footer.js:
--------------------------------------------------------------------------------
1 | export default 'footer';
2 |
--------------------------------------------------------------------------------
/no-parse/src/components/header.js:
--------------------------------------------------------------------------------
1 | export default 'header';
2 |
--------------------------------------------------------------------------------
/no-parse/src/index.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import ReactDOM from 'react-dom';
3 | import lodash from 'lodash';
4 |
5 | ReactDOM.render(
6 | Hello World!,
7 | document.getElementById('app')
8 | );
9 |
--------------------------------------------------------------------------------
/no-parse/webpack.config.js:
--------------------------------------------------------------------------------
1 | const path = require('path');
2 |
3 | /**
4 | * loaders list
5 | */
6 | const loaders = [
7 | {
8 | test: /\.jsx?$/,
9 | exclude: /node_modules/,
10 | loader: 'babel-loader',
11 | query: {
12 | presets: ['react', 'es2015', 'stage-0'],
13 | plugins: ['add-module-exports']
14 | }
15 | }
16 | ];
17 |
18 | /**
19 | * plugins list
20 | */
21 | const plugins = [];
22 |
23 | module.exports = {
24 | entry: {
25 | index: path.join(__dirname, 'src/index.js')
26 | },
27 | output: {
28 | path: path.join(__dirname, 'build'),
29 | filename: '[name].js'
30 | },
31 | module: {
32 | loaders: loaders,
33 | noParse: [
34 | /lodash/
35 | ]
36 | },
37 | plugins: plugins,
38 | externals: {
39 | 'react': 'React',
40 | 'react-dom': 'ReactDOM'
41 | }
42 | };
43 |
--------------------------------------------------------------------------------
/parallel-webpack/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules/
2 |
--------------------------------------------------------------------------------
/parallel-webpack/README.md:
--------------------------------------------------------------------------------
1 | # Parallel-Webpack
2 |
--------------------------------------------------------------------------------
/parallel-webpack/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "webpack-base",
3 | "version": "0.0.1",
4 | "description": "a webpack base repo",
5 | "main": "build/index.js",
6 | "scripts": {
7 | "clean": "rimraf ./build",
8 | "prebuild": "npm run clean",
9 | "build": "webpack --progress --profile",
10 | "parallel-build": "parallel-webpack --progress --profile"
11 | },
12 | "repository": {
13 | "type": "git",
14 | "url": "git+https://github.com/FrendEr/webpack-base.git"
15 | },
16 | "author": "FrendEr",
17 | "license": "MIT",
18 | "bugs": {
19 | "url": "https://github.com/FrendEr/webpack-base/issues"
20 | },
21 | "homepage": "https://github.com/FrendEr/webpack-base#readme",
22 | "devDependencies": {
23 | "babel-loader": "^6.2.4",
24 | "babel-plugin-add-module-exports": "^0.2.1",
25 | "babel-preset-es2015": "^6.9.0",
26 | "babel-preset-react": "^6.5.0",
27 | "babel-preset-stage-0": "^6.5.0",
28 | "extract-text-webpack-plugin": "^1.0.1",
29 | "parallel-webpack": "^1.5.0",
30 | "rimraf": "^2.5.2",
31 | "webpack": "^1.13.1"
32 | },
33 | "dependencies": {
34 | "lodash": "^4.13.1",
35 | "react": "^15.1.0",
36 | "react-dom": "^15.1.0"
37 | }
38 | }
39 |
--------------------------------------------------------------------------------
/parallel-webpack/src/components/body.js:
--------------------------------------------------------------------------------
1 | module.exports = 'body';
2 |
--------------------------------------------------------------------------------
/parallel-webpack/src/components/footer.js:
--------------------------------------------------------------------------------
1 | module.exports = 'footer';
2 |
--------------------------------------------------------------------------------
/parallel-webpack/src/components/header.js:
--------------------------------------------------------------------------------
1 | module.exports = 'header';
2 |
--------------------------------------------------------------------------------
/parallel-webpack/src/container/home.js:
--------------------------------------------------------------------------------
1 | import lodash from 'lodash';
2 | import React from 'react';
3 | import ReactDOM from 'react-dom';
4 |
--------------------------------------------------------------------------------
/parallel-webpack/src/container/item.js:
--------------------------------------------------------------------------------
1 | import lodash from 'lodash';
2 | import React from 'react';
3 | import ReactDOM from 'react-dom';
4 |
--------------------------------------------------------------------------------
/parallel-webpack/src/container/list.js:
--------------------------------------------------------------------------------
1 | import lodash from 'lodash';
2 | import React from 'react';
3 | import ReactDOM from 'react-dom';
4 |
--------------------------------------------------------------------------------
/parallel-webpack/webpack.config.js:
--------------------------------------------------------------------------------
1 | const path = require('path');
2 | const webpack = require('webpack');
3 |
4 | /**
5 | * loaders list
6 | */
7 | const loaders = [
8 | {
9 | test: /\.jsx?$/,
10 | exclude: /node_modules/,
11 | loader: 'babel',
12 | query: {
13 | presets: ['react', 'es2015', 'stage-0']
14 | }
15 | }
16 | ];
17 |
18 | /**
19 | * plugins list
20 | */
21 | const plugins = [
22 | new webpack.DefinePlugin({
23 | 'process.env': {
24 | 'NODE_ENV': JSON.stringify('production')
25 | }
26 | }),
27 | new webpack.optimize.DedupePlugin(),
28 | new webpack.optimize.UglifyJsPlugin({
29 | sourceMap: false,
30 | minimize: true,
31 | mangle: {
32 | except: ['functor']
33 | },
34 | compress: {
35 | drop_debugger: true,
36 | warnings: false,
37 | drop_console: true
38 | }
39 | })
40 | ];
41 |
42 | module.exports = [{
43 | entry: {
44 | home: path.join(__dirname, 'src/container/home.js')
45 | },
46 | output: {
47 | path: path.join(__dirname, 'build'),
48 | filename: '[name].js'
49 | },
50 | module: {
51 | loaders: loaders
52 | },
53 | plugins: plugins
54 | }, {
55 | entry: {
56 | list: path.join(__dirname, 'src/container/list.js')
57 | },
58 | output: {
59 | path: path.join(__dirname, 'build'),
60 | filename: '[name].js'
61 | },
62 | module: {
63 | loaders: loaders
64 | },
65 | plugins: plugins
66 | }, {
67 | entry: {
68 | item: path.join(__dirname, 'src/container/item.js')
69 | },
70 | output: {
71 | path: path.join(__dirname, 'build'),
72 | filename: '[name].js'
73 | },
74 | module: {
75 | loaders: loaders
76 | },
77 | plugins: plugins
78 | }];
79 |
--------------------------------------------------------------------------------
/prefetch-plugin/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules/
2 |
--------------------------------------------------------------------------------
/prefetch-plugin/README.md:
--------------------------------------------------------------------------------
1 | # PrefetchPlugin
2 |
3 | Use `webpack.PrefetchPlugin` for `Long module build chains`. Use [webpack/analyse](http://webpack.github.io/analyse) can help you to find out more information about your builds.
4 |
--------------------------------------------------------------------------------
/prefetch-plugin/build/index.js:
--------------------------------------------------------------------------------
1 | /******/ (function(modules) { // webpackBootstrap
2 | /******/ // The module cache
3 | /******/ var installedModules = {};
4 |
5 | /******/ // The require function
6 | /******/ function __webpack_require__(moduleId) {
7 |
8 | /******/ // Check if module is in cache
9 | /******/ if(installedModules[moduleId])
10 | /******/ return installedModules[moduleId].exports;
11 |
12 | /******/ // Create a new module (and put it into the cache)
13 | /******/ var module = installedModules[moduleId] = {
14 | /******/ exports: {},
15 | /******/ id: moduleId,
16 | /******/ loaded: false
17 | /******/ };
18 |
19 | /******/ // Execute the module function
20 | /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
21 |
22 | /******/ // Flag the module as loaded
23 | /******/ module.loaded = true;
24 |
25 | /******/ // Return the exports of the module
26 | /******/ return module.exports;
27 | /******/ }
28 |
29 |
30 | /******/ // expose the modules object (__webpack_modules__)
31 | /******/ __webpack_require__.m = modules;
32 |
33 | /******/ // expose the module cache
34 | /******/ __webpack_require__.c = installedModules;
35 |
36 | /******/ // __webpack_public_path__
37 | /******/ __webpack_require__.p = "";
38 |
39 | /******/ // Load entry module and return exports
40 | /******/ return __webpack_require__(0);
41 | /******/ })
42 | /************************************************************************/
43 | /******/ ([
44 | /* 0 */
45 | /***/ function(module, exports, __webpack_require__) {
46 |
47 | 'use strict';
48 |
49 | var _app = __webpack_require__(1);
50 |
51 | var _app2 = _interopRequireDefault(_app);
52 |
53 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
54 |
55 | /***/ },
56 | /* 1 */
57 | /***/ function(module, exports, __webpack_require__) {
58 |
59 | 'use strict';
60 |
61 | Object.defineProperty(exports, "__esModule", {
62 | value: true
63 | });
64 |
65 | var _header = __webpack_require__(2);
66 |
67 | var _header2 = _interopRequireDefault(_header);
68 |
69 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
70 |
71 | exports.default = 'app';
72 | module.exports = exports['default'];
73 |
74 | /***/ },
75 | /* 2 */
76 | /***/ function(module, exports, __webpack_require__) {
77 |
78 | 'use strict';
79 |
80 | Object.defineProperty(exports, "__esModule", {
81 | value: true
82 | });
83 |
84 | var _nav = __webpack_require__(3);
85 |
86 | var _nav2 = _interopRequireDefault(_nav);
87 |
88 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
89 |
90 | exports.default = 'header';
91 | module.exports = exports['default'];
92 |
93 | /***/ },
94 | /* 3 */
95 | /***/ function(module, exports) {
96 |
97 | 'use strict';
98 |
99 | Object.defineProperty(exports, "__esModule", {
100 | value: true
101 | });
102 | exports.default = 'nav';
103 | module.exports = exports['default'];
104 |
105 | /***/ }
106 | /******/ ]);
--------------------------------------------------------------------------------
/prefetch-plugin/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "webpack-base",
3 | "version": "0.0.1",
4 | "description": "a webpack base repo",
5 | "main": "build/index.js",
6 | "scripts": {
7 | "clean": "rimraf ./build stat.json",
8 | "prebuild": "npm run clean",
9 | "build": "webpack --progress --profile --json > stat.json"
10 | },
11 | "repository": {
12 | "type": "git",
13 | "url": "git+https://github.com/FrendEr/webpack-startkit.git"
14 | },
15 | "author": "FrendEr",
16 | "license": "MIT",
17 | "bugs": {
18 | "url": "https://github.com/FrendEr/webpack-startkit/issues"
19 | },
20 | "homepage": "https://github.com/FrendEr/webpack-startkit#readme",
21 | "devDependencies": {
22 | "babel-loader": "^6.2.4",
23 | "babel-plugin-add-module-exports": "^0.2.1",
24 | "babel-preset-es2015": "^6.9.0",
25 | "babel-preset-react": "^6.5.0",
26 | "babel-preset-stage-0": "^6.5.0",
27 | "extract-text-webpack-plugin": "^1.0.1",
28 | "rimraf": "^2.5.2",
29 | "webpack": "^1.13.1"
30 | },
31 | "dependencies": {
32 | "lodash": "^4.13.1",
33 | "react": "^15.1.0",
34 | "react-dom": "^15.1.0"
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/prefetch-plugin/src/components/app.js:
--------------------------------------------------------------------------------
1 | import Header from './header';
2 |
3 | export default 'app';
4 |
--------------------------------------------------------------------------------
/prefetch-plugin/src/components/header.js:
--------------------------------------------------------------------------------
1 | import Nav from './nav';
2 |
3 | export default 'header';
4 |
--------------------------------------------------------------------------------
/prefetch-plugin/src/components/nav.js:
--------------------------------------------------------------------------------
1 | export default 'nav';
2 |
--------------------------------------------------------------------------------
/prefetch-plugin/src/index.js:
--------------------------------------------------------------------------------
1 | import App from './components/app';
2 |
--------------------------------------------------------------------------------
/prefetch-plugin/stat.json:
--------------------------------------------------------------------------------
1 | {
2 | "errors": [],
3 | "warnings": [],
4 | "version": "1.13.1",
5 | "hash": "abadcc9dccd64f8ebf6f",
6 | "time": 697,
7 | "publicPath": "",
8 | "assetsByChunkName": {
9 | "index": "index.js"
10 | },
11 | "assets": [
12 | {
13 | "name": "index.js",
14 | "size": 2618,
15 | "chunks": [
16 | 0
17 | ],
18 | "chunkNames": [
19 | "index"
20 | ],
21 | "emitted": true
22 | }
23 | ],
24 | "chunks": [
25 | {
26 | "id": 0,
27 | "rendered": true,
28 | "initial": true,
29 | "entry": true,
30 | "extraAsync": false,
31 | "size": 974,
32 | "names": [
33 | "index"
34 | ],
35 | "files": [
36 | "index.js"
37 | ],
38 | "hash": "d439681b500bd51e2ba7",
39 | "parents": [],
40 | "modules": [
41 | {
42 | "id": 0,
43 | "identifier": "/Users/alibaba/Documents/kaian/github-repo/webpack-optimize-example/prefetch-plugin/node_modules/.npminstall/babel-loader/6.2.4/babel-loader/index.js?{\"presets\":[\"react\",\"es2015\",\"stage-0\"],\"plugins\":[\"add-module-exports\"]}!/Users/alibaba/Documents/kaian/github-repo/webpack-optimize-example/prefetch-plugin/src/index.js",
44 | "name": "./src/index.js",
45 | "index": 0,
46 | "index2": 3,
47 | "size": 194,
48 | "cacheable": true,
49 | "built": true,
50 | "optional": false,
51 | "prefetched": false,
52 | "chunks": [
53 | 0
54 | ],
55 | "assets": [],
56 | "issuer": null,
57 | "profile": {
58 | "factory": 21,
59 | "building": 566,
60 | "dependencies": 71
61 | },
62 | "failed": false,
63 | "errors": 0,
64 | "warnings": 0,
65 | "reasons": [],
66 | "source": "'use strict';\n\nvar _app = require('./components/app');\n\nvar _app2 = _interopRequireDefault(_app);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }"
67 | },
68 | {
69 | "id": 1,
70 | "identifier": "/Users/alibaba/Documents/kaian/github-repo/webpack-optimize-example/prefetch-plugin/node_modules/.npminstall/babel-loader/6.2.4/babel-loader/index.js?{\"presets\":[\"react\",\"es2015\",\"stage-0\"],\"plugins\":[\"add-module-exports\"]}!/Users/alibaba/Documents/kaian/github-repo/webpack-optimize-example/prefetch-plugin/src/components/app.js",
71 | "name": "./src/components/app.js",
72 | "index": 1,
73 | "index2": 2,
74 | "size": 324,
75 | "cacheable": true,
76 | "built": true,
77 | "optional": false,
78 | "prefetched": true,
79 | "chunks": [
80 | 0
81 | ],
82 | "assets": [],
83 | "issuer": null,
84 | "profile": {
85 | "factory": 389,
86 | "building": 239,
87 | "dependencies": 36
88 | },
89 | "failed": false,
90 | "errors": 0,
91 | "warnings": 0,
92 | "reasons": [
93 | {
94 | "moduleId": 0,
95 | "moduleIdentifier": "/Users/alibaba/Documents/kaian/github-repo/webpack-optimize-example/prefetch-plugin/node_modules/.npminstall/babel-loader/6.2.4/babel-loader/index.js?{\"presets\":[\"react\",\"es2015\",\"stage-0\"],\"plugins\":[\"add-module-exports\"]}!/Users/alibaba/Documents/kaian/github-repo/webpack-optimize-example/prefetch-plugin/src/index.js",
96 | "module": "./src/index.js",
97 | "moduleName": "./src/index.js",
98 | "type": "cjs require",
99 | "userRequest": "./components/app",
100 | "loc": "3:11-38"
101 | }
102 | ],
103 | "source": "'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _header = require('./header');\n\nvar _header2 = _interopRequireDefault(_header);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = 'app';\nmodule.exports = exports['default'];"
104 | },
105 | {
106 | "id": 2,
107 | "identifier": "/Users/alibaba/Documents/kaian/github-repo/webpack-optimize-example/prefetch-plugin/node_modules/.npminstall/babel-loader/6.2.4/babel-loader/index.js?{\"presets\":[\"react\",\"es2015\",\"stage-0\"],\"plugins\":[\"add-module-exports\"]}!/Users/alibaba/Documents/kaian/github-repo/webpack-optimize-example/prefetch-plugin/src/components/header.js",
108 | "name": "./src/components/header.js",
109 | "index": 2,
110 | "index2": 1,
111 | "size": 315,
112 | "cacheable": true,
113 | "built": true,
114 | "optional": false,
115 | "prefetched": true,
116 | "chunks": [
117 | 0
118 | ],
119 | "assets": [],
120 | "issuer": null,
121 | "profile": {
122 | "factory": 386,
123 | "building": 257,
124 | "dependencies": 15
125 | },
126 | "failed": false,
127 | "errors": 0,
128 | "warnings": 0,
129 | "reasons": [
130 | {
131 | "moduleId": 1,
132 | "moduleIdentifier": "/Users/alibaba/Documents/kaian/github-repo/webpack-optimize-example/prefetch-plugin/node_modules/.npminstall/babel-loader/6.2.4/babel-loader/index.js?{\"presets\":[\"react\",\"es2015\",\"stage-0\"],\"plugins\":[\"add-module-exports\"]}!/Users/alibaba/Documents/kaian/github-repo/webpack-optimize-example/prefetch-plugin/src/components/app.js",
133 | "module": "./src/components/app.js",
134 | "moduleName": "./src/components/app.js",
135 | "type": "cjs require",
136 | "userRequest": "./header",
137 | "loc": "7:14-33"
138 | }
139 | ],
140 | "source": "'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _nav = require('./nav');\n\nvar _nav2 = _interopRequireDefault(_nav);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = 'header';\nmodule.exports = exports['default'];"
141 | },
142 | {
143 | "id": 3,
144 | "identifier": "/Users/alibaba/Documents/kaian/github-repo/webpack-optimize-example/prefetch-plugin/node_modules/.npminstall/babel-loader/6.2.4/babel-loader/index.js?{\"presets\":[\"react\",\"es2015\",\"stage-0\"],\"plugins\":[\"add-module-exports\"]}!/Users/alibaba/Documents/kaian/github-repo/webpack-optimize-example/prefetch-plugin/src/components/nav.js",
145 | "name": "./src/components/nav.js",
146 | "index": 3,
147 | "index2": 0,
148 | "size": 141,
149 | "cacheable": true,
150 | "built": true,
151 | "optional": false,
152 | "prefetched": true,
153 | "chunks": [
154 | 0
155 | ],
156 | "assets": [],
157 | "issuer": null,
158 | "profile": {
159 | "factory": 385,
160 | "building": 265
161 | },
162 | "failed": false,
163 | "errors": 0,
164 | "warnings": 0,
165 | "reasons": [
166 | {
167 | "moduleId": 2,
168 | "moduleIdentifier": "/Users/alibaba/Documents/kaian/github-repo/webpack-optimize-example/prefetch-plugin/node_modules/.npminstall/babel-loader/6.2.4/babel-loader/index.js?{\"presets\":[\"react\",\"es2015\",\"stage-0\"],\"plugins\":[\"add-module-exports\"]}!/Users/alibaba/Documents/kaian/github-repo/webpack-optimize-example/prefetch-plugin/src/components/header.js",
169 | "module": "./src/components/header.js",
170 | "moduleName": "./src/components/header.js",
171 | "type": "cjs require",
172 | "userRequest": "./nav",
173 | "loc": "7:11-27"
174 | }
175 | ],
176 | "source": "'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = 'nav';\nmodule.exports = exports['default'];"
177 | }
178 | ],
179 | "filteredModules": 0,
180 | "origins": [
181 | {
182 | "moduleId": 0,
183 | "module": "/Users/alibaba/Documents/kaian/github-repo/webpack-optimize-example/prefetch-plugin/node_modules/.npminstall/babel-loader/6.2.4/babel-loader/index.js?{\"presets\":[\"react\",\"es2015\",\"stage-0\"],\"plugins\":[\"add-module-exports\"]}!/Users/alibaba/Documents/kaian/github-repo/webpack-optimize-example/prefetch-plugin/src/index.js",
184 | "moduleIdentifier": "/Users/alibaba/Documents/kaian/github-repo/webpack-optimize-example/prefetch-plugin/node_modules/.npminstall/babel-loader/6.2.4/babel-loader/index.js?{\"presets\":[\"react\",\"es2015\",\"stage-0\"],\"plugins\":[\"add-module-exports\"]}!/Users/alibaba/Documents/kaian/github-repo/webpack-optimize-example/prefetch-plugin/src/index.js",
185 | "moduleName": "./src/index.js",
186 | "loc": "",
187 | "name": "index",
188 | "reasons": []
189 | }
190 | ]
191 | }
192 | ],
193 | "modules": [
194 | {
195 | "id": 0,
196 | "identifier": "/Users/alibaba/Documents/kaian/github-repo/webpack-optimize-example/prefetch-plugin/node_modules/.npminstall/babel-loader/6.2.4/babel-loader/index.js?{\"presets\":[\"react\",\"es2015\",\"stage-0\"],\"plugins\":[\"add-module-exports\"]}!/Users/alibaba/Documents/kaian/github-repo/webpack-optimize-example/prefetch-plugin/src/index.js",
197 | "name": "./src/index.js",
198 | "index": 0,
199 | "index2": 3,
200 | "size": 194,
201 | "cacheable": true,
202 | "built": true,
203 | "optional": false,
204 | "prefetched": false,
205 | "chunks": [
206 | 0
207 | ],
208 | "assets": [],
209 | "issuer": null,
210 | "profile": {
211 | "factory": 21,
212 | "building": 566,
213 | "dependencies": 71
214 | },
215 | "failed": false,
216 | "errors": 0,
217 | "warnings": 0,
218 | "reasons": [],
219 | "source": "'use strict';\n\nvar _app = require('./components/app');\n\nvar _app2 = _interopRequireDefault(_app);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }"
220 | },
221 | {
222 | "id": 1,
223 | "identifier": "/Users/alibaba/Documents/kaian/github-repo/webpack-optimize-example/prefetch-plugin/node_modules/.npminstall/babel-loader/6.2.4/babel-loader/index.js?{\"presets\":[\"react\",\"es2015\",\"stage-0\"],\"plugins\":[\"add-module-exports\"]}!/Users/alibaba/Documents/kaian/github-repo/webpack-optimize-example/prefetch-plugin/src/components/app.js",
224 | "name": "./src/components/app.js",
225 | "index": 1,
226 | "index2": 2,
227 | "size": 324,
228 | "cacheable": true,
229 | "built": true,
230 | "optional": false,
231 | "prefetched": true,
232 | "chunks": [
233 | 0
234 | ],
235 | "assets": [],
236 | "issuer": null,
237 | "profile": {
238 | "factory": 389,
239 | "building": 239,
240 | "dependencies": 36
241 | },
242 | "failed": false,
243 | "errors": 0,
244 | "warnings": 0,
245 | "reasons": [
246 | {
247 | "moduleId": 0,
248 | "moduleIdentifier": "/Users/alibaba/Documents/kaian/github-repo/webpack-optimize-example/prefetch-plugin/node_modules/.npminstall/babel-loader/6.2.4/babel-loader/index.js?{\"presets\":[\"react\",\"es2015\",\"stage-0\"],\"plugins\":[\"add-module-exports\"]}!/Users/alibaba/Documents/kaian/github-repo/webpack-optimize-example/prefetch-plugin/src/index.js",
249 | "module": "./src/index.js",
250 | "moduleName": "./src/index.js",
251 | "type": "cjs require",
252 | "userRequest": "./components/app",
253 | "loc": "3:11-38"
254 | }
255 | ],
256 | "source": "'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _header = require('./header');\n\nvar _header2 = _interopRequireDefault(_header);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = 'app';\nmodule.exports = exports['default'];"
257 | },
258 | {
259 | "id": 2,
260 | "identifier": "/Users/alibaba/Documents/kaian/github-repo/webpack-optimize-example/prefetch-plugin/node_modules/.npminstall/babel-loader/6.2.4/babel-loader/index.js?{\"presets\":[\"react\",\"es2015\",\"stage-0\"],\"plugins\":[\"add-module-exports\"]}!/Users/alibaba/Documents/kaian/github-repo/webpack-optimize-example/prefetch-plugin/src/components/header.js",
261 | "name": "./src/components/header.js",
262 | "index": 2,
263 | "index2": 1,
264 | "size": 315,
265 | "cacheable": true,
266 | "built": true,
267 | "optional": false,
268 | "prefetched": true,
269 | "chunks": [
270 | 0
271 | ],
272 | "assets": [],
273 | "issuer": null,
274 | "profile": {
275 | "factory": 386,
276 | "building": 257,
277 | "dependencies": 15
278 | },
279 | "failed": false,
280 | "errors": 0,
281 | "warnings": 0,
282 | "reasons": [
283 | {
284 | "moduleId": 1,
285 | "moduleIdentifier": "/Users/alibaba/Documents/kaian/github-repo/webpack-optimize-example/prefetch-plugin/node_modules/.npminstall/babel-loader/6.2.4/babel-loader/index.js?{\"presets\":[\"react\",\"es2015\",\"stage-0\"],\"plugins\":[\"add-module-exports\"]}!/Users/alibaba/Documents/kaian/github-repo/webpack-optimize-example/prefetch-plugin/src/components/app.js",
286 | "module": "./src/components/app.js",
287 | "moduleName": "./src/components/app.js",
288 | "type": "cjs require",
289 | "userRequest": "./header",
290 | "loc": "7:14-33"
291 | }
292 | ],
293 | "source": "'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _nav = require('./nav');\n\nvar _nav2 = _interopRequireDefault(_nav);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = 'header';\nmodule.exports = exports['default'];"
294 | },
295 | {
296 | "id": 3,
297 | "identifier": "/Users/alibaba/Documents/kaian/github-repo/webpack-optimize-example/prefetch-plugin/node_modules/.npminstall/babel-loader/6.2.4/babel-loader/index.js?{\"presets\":[\"react\",\"es2015\",\"stage-0\"],\"plugins\":[\"add-module-exports\"]}!/Users/alibaba/Documents/kaian/github-repo/webpack-optimize-example/prefetch-plugin/src/components/nav.js",
298 | "name": "./src/components/nav.js",
299 | "index": 3,
300 | "index2": 0,
301 | "size": 141,
302 | "cacheable": true,
303 | "built": true,
304 | "optional": false,
305 | "prefetched": true,
306 | "chunks": [
307 | 0
308 | ],
309 | "assets": [],
310 | "issuer": null,
311 | "profile": {
312 | "factory": 385,
313 | "building": 265
314 | },
315 | "failed": false,
316 | "errors": 0,
317 | "warnings": 0,
318 | "reasons": [
319 | {
320 | "moduleId": 2,
321 | "moduleIdentifier": "/Users/alibaba/Documents/kaian/github-repo/webpack-optimize-example/prefetch-plugin/node_modules/.npminstall/babel-loader/6.2.4/babel-loader/index.js?{\"presets\":[\"react\",\"es2015\",\"stage-0\"],\"plugins\":[\"add-module-exports\"]}!/Users/alibaba/Documents/kaian/github-repo/webpack-optimize-example/prefetch-plugin/src/components/header.js",
322 | "module": "./src/components/header.js",
323 | "moduleName": "./src/components/header.js",
324 | "type": "cjs require",
325 | "userRequest": "./nav",
326 | "loc": "7:11-27"
327 | }
328 | ],
329 | "source": "'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = 'nav';\nmodule.exports = exports['default'];"
330 | }
331 | ],
332 | "filteredModules": 0,
333 | "children": []
334 | }
335 |
--------------------------------------------------------------------------------
/prefetch-plugin/webpack.config.js:
--------------------------------------------------------------------------------
1 | const path = require('path');
2 | const webpack = require('webpack');
3 |
4 | /**
5 | * loaders list
6 | */
7 | const loaders = [
8 | {
9 | test: /\.jsx?$/,
10 | exclude: /node_modules/,
11 | loader: 'babel-loader',
12 | query: {
13 | presets: ['react', 'es2015', 'stage-0'],
14 | plugins: ['add-module-exports']
15 | }
16 | }
17 | ];
18 |
19 | /**
20 | * plugins list
21 | */
22 | const plugins = [
23 | new webpack.PrefetchPlugin(path.join(__dirname, './src/components/app.js')),
24 | new webpack.PrefetchPlugin(path.join(__dirname, './src/components/header.js')),
25 | new webpack.PrefetchPlugin(path.join(__dirname, './src/components/nav.js'))
26 | ];
27 |
28 | module.exports = {
29 | entry: {
30 | index: path.join(__dirname, 'src/index.js')
31 | },
32 | output: {
33 | path: path.join(__dirname, 'build'),
34 | filename: '[name].js'
35 | },
36 | module: {
37 | loaders: loaders
38 | },
39 | plugins: plugins
40 | };
41 |
--------------------------------------------------------------------------------
/tree-shaking/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules/
2 |
--------------------------------------------------------------------------------
/tree-shaking/README.md:
--------------------------------------------------------------------------------
1 | # Tree Shaking
2 |
3 | You can get more infomation from [rollup.js](http://rollupjs.org/), and it has implement in Webpack2.0
4 |
--------------------------------------------------------------------------------
/tree-shaking/build/index.js:
--------------------------------------------------------------------------------
1 | /******/ (function(modules) { // webpackBootstrap
2 | /******/ // The module cache
3 | /******/ var installedModules = {};
4 |
5 | /******/ // The require function
6 | /******/ function __webpack_require__(moduleId) {
7 |
8 | /******/ // Check if module is in cache
9 | /******/ if(installedModules[moduleId])
10 | /******/ return installedModules[moduleId].exports;
11 |
12 | /******/ // Create a new module (and put it into the cache)
13 | /******/ var module = installedModules[moduleId] = {
14 | /******/ i: moduleId,
15 | /******/ l: false,
16 | /******/ exports: {}
17 | /******/ };
18 |
19 | /******/ // Execute the module function
20 | /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
21 |
22 | /******/ // Flag the module as loaded
23 | /******/ module.l = true;
24 |
25 | /******/ // Return the exports of the module
26 | /******/ return module.exports;
27 | /******/ }
28 |
29 |
30 | /******/ // expose the modules object (__webpack_modules__)
31 | /******/ __webpack_require__.m = modules;
32 |
33 | /******/ // expose the module cache
34 | /******/ __webpack_require__.c = installedModules;
35 |
36 | /******/ // identity function for calling harmory imports with the correct context
37 | /******/ __webpack_require__.i = function(value) { return value; };
38 |
39 | /******/ // define getter function for harmory exports
40 | /******/ __webpack_require__.d = function(exports, name, getter) {
41 | /******/ Object.defineProperty(exports, name, {
42 | /******/ configurable: false,
43 | /******/ enumerable: true,
44 | /******/ get: getter
45 | /******/ });
46 | /******/ };
47 |
48 | /******/ // Object.prototype.hasOwnProperty.call
49 | /******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
50 |
51 | /******/ // __webpack_public_path__
52 | /******/ __webpack_require__.p = "";
53 |
54 | /******/ // Load entry module and return exports
55 | /******/ return __webpack_require__(__webpack_require__.s = 3);
56 | /******/ })
57 | /************************************************************************/
58 | /******/ ([
59 | /* 0 */
60 | /***/ function(module, exports, __webpack_require__) {
61 |
62 | "use strict";
63 | /* harmony export */ exports["a"] = A;/* unused harmony export B */function A() {
64 | return 'body';
65 | }
66 |
67 | function B() {
68 | return 'body2';
69 | }
70 |
71 |
72 | /***/ },
73 | /* 1 */
74 | /***/ function(module, exports, __webpack_require__) {
75 |
76 | "use strict";
77 | /* harmony default export */ exports["a"] = 'footer';
78 |
79 |
80 | /***/ },
81 | /* 2 */
82 | /***/ function(module, exports, __webpack_require__) {
83 |
84 | "use strict";
85 | /* harmony default export */ exports["a"] = 'header';
86 |
87 |
88 | /***/ },
89 | /* 3 */
90 | /***/ function(module, exports, __webpack_require__) {
91 |
92 | "use strict";
93 | /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__components_header__ = __webpack_require__(2);
94 | /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__components_body__ = __webpack_require__(0);
95 | /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__components_footer__ = __webpack_require__(1);
96 |
97 |
98 |
99 |
100 | console.log(__WEBPACK_IMPORTED_MODULE_0__components_header__["a" /* default */], __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__components_body__["a" /* A */])(), __WEBPACK_IMPORTED_MODULE_2__components_footer__["a" /* default */]);
101 |
102 |
103 | /***/ }
104 | /******/ ]);
--------------------------------------------------------------------------------
/tree-shaking/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "webpack-startkit",
3 | "version": "0.0.1",
4 | "description": "Webpack startkit with base configuration",
5 | "main": "build/index.js",
6 | "scripts": {
7 | "clean": "rimraf ./build",
8 | "prebuild": "npm run clean",
9 | "build": "webpack --progress --profile --display-used-exports"
10 | },
11 | "repository": {
12 | "type": "git",
13 | "url": "git+https://github.com/FrendEr/webpack-startkit.git"
14 | },
15 | "author": "FrendEr",
16 | "license": "MIT",
17 | "bugs": {
18 | "url": "https://github.com/FrendEr/webpack-startkit/issues"
19 | },
20 | "homepage": "https://github.com/FrendEr/webpack-startkit#readme",
21 | "devDependencies": {
22 | "rimraf": "^2.5.2",
23 | "webpack": "2.1.0-beta.15"
24 | },
25 | "dependencies": {
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/tree-shaking/src/components/body.js:
--------------------------------------------------------------------------------
1 | export function A() {
2 | return 'body';
3 | }
4 |
5 | export function B() {
6 | return 'body2';
7 | }
8 |
--------------------------------------------------------------------------------
/tree-shaking/src/components/footer.js:
--------------------------------------------------------------------------------
1 | export default 'footer';
2 |
--------------------------------------------------------------------------------
/tree-shaking/src/components/header.js:
--------------------------------------------------------------------------------
1 | export default 'header';
2 |
--------------------------------------------------------------------------------
/tree-shaking/src/index.js:
--------------------------------------------------------------------------------
1 | import Header from './components/header';
2 | import { A } from './components/body';
3 | import Footer from './components/footer';
4 |
5 | console.log(Header, A(), Footer);
6 |
--------------------------------------------------------------------------------
/tree-shaking/webpack.config.js:
--------------------------------------------------------------------------------
1 | const path = require('path');
2 | const webpack = require('webpack');
3 |
4 | /**
5 | * loaders list
6 | */
7 | const loaders = [];
8 |
9 | /**
10 | * plugins list
11 | */
12 | const plugins = [];
13 |
14 | module.exports = {
15 | entry: {
16 | index: path.join(__dirname, 'src/index.js')
17 | },
18 | output: {
19 | path: path.join(__dirname, 'build'),
20 | filename: '[name].js'
21 | },
22 | module: {
23 | loaders: loaders
24 | },
25 | plugins: plugins
26 | };
27 |
--------------------------------------------------------------------------------
/uglifyjs/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules/
2 |
--------------------------------------------------------------------------------
/uglifyjs/README.md:
--------------------------------------------------------------------------------
1 | # Uglifyjs
2 |
--------------------------------------------------------------------------------
/uglifyjs/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | UglifyJS Example
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/uglifyjs/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "webpack-base",
3 | "version": "0.0.1",
4 | "description": "a webpack base repo",
5 | "main": "build/index.js",
6 | "scripts": {
7 | "clean": "rimraf ./build",
8 | "prebuild": "npm run clean",
9 | "build": "webpack --progress --profile"
10 | },
11 | "repository": {
12 | "type": "git",
13 | "url": "git+https://github.com/FrendEr/webpack-base.git"
14 | },
15 | "author": "FrendEr",
16 | "license": "MIT",
17 | "bugs": {
18 | "url": "https://github.com/FrendEr/webpack-base/issues"
19 | },
20 | "homepage": "https://github.com/FrendEr/webpack-base#readme",
21 | "devDependencies": {
22 | "babel-loader": "^6.2.4",
23 | "babel-plugin-add-module-exports": "^0.2.1",
24 | "babel-preset-es2015": "^6.9.0",
25 | "babel-preset-react": "^6.5.0",
26 | "babel-preset-stage-0": "^6.5.0",
27 | "extract-text-webpack-plugin": "^1.0.1",
28 | "rimraf": "^2.5.2",
29 | "webpack": "^1.13.1"
30 | },
31 | "dependencies": {
32 | "react": "^15.1.0",
33 | "react-dom": "^15.1.0"
34 | }
35 | }
36 |
--------------------------------------------------------------------------------
/uglifyjs/src/index.js:
--------------------------------------------------------------------------------
1 | // react 以及 react-dom 通过配置别名引入压缩后的文件,
2 | // 使用 uglify-js@2.6.3 进行压缩,效率大大提升
3 | // #issue : https://github.com/mishoo/UglifyJS2/pull/1024
4 | import React from 'react';
5 | import ReactDOM from 'react-dom';
6 |
7 | ReactDOM.render(
8 | Hello World,
9 | document.getElementById('app')
10 | );
11 |
--------------------------------------------------------------------------------
/uglifyjs/webpack.config.js:
--------------------------------------------------------------------------------
1 | const path = require('path');
2 | const webpack = require('webpack');
3 |
4 | /**
5 | * loaders list
6 | */
7 | const loaders = [
8 | {
9 | test: /\.jsx?$/,
10 | exclude: /node_modules/,
11 | loader: 'babel-loader',
12 | query: {
13 | presets: ['react', 'es2015', 'stage-0'],
14 | plugins: ['add-module-exports']
15 | }
16 | }
17 | ];
18 |
19 | /**
20 | * plugins list
21 | */
22 | const plugins = [
23 | new webpack.optimize.UglifyJsPlugin({
24 | mangle: {
25 | except: ['functor']
26 | },
27 | compress: {
28 | warnings: false
29 | }
30 | })
31 | ];
32 |
33 | module.exports = {
34 | entry: {
35 | index: path.join(__dirname, 'src/index.js')
36 | },
37 | output: {
38 | path: path.join(__dirname, 'build'),
39 | filename: '[name].js'
40 | },
41 | resolve: {
42 | alias: {
43 | 'react': path.resolve(__dirname, 'node_modules/react/dist/react.min.js'),
44 | 'react-dom': path.resolve(__dirname, 'node_modules/react-dom/dist/react-dom.min.js')
45 | }
46 | },
47 | module: {
48 | loaders: loaders
49 | },
50 | plugins: plugins
51 | };
52 |
--------------------------------------------------------------------------------
/webpack2.0/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules/
2 |
--------------------------------------------------------------------------------
/webpack2.0/README.md:
--------------------------------------------------------------------------------
1 | # Webpack2.0
2 |
--------------------------------------------------------------------------------
/webpack2.0/build/index.js:
--------------------------------------------------------------------------------
1 | /******/ (function(modules) { // webpackBootstrap
2 | /******/ // The module cache
3 | /******/ var installedModules = {};
4 |
5 | /******/ // The require function
6 | /******/ function __webpack_require__(moduleId) {
7 |
8 | /******/ // Check if module is in cache
9 | /******/ if(installedModules[moduleId])
10 | /******/ return installedModules[moduleId].exports;
11 |
12 | /******/ // Create a new module (and put it into the cache)
13 | /******/ var module = installedModules[moduleId] = {
14 | /******/ i: moduleId,
15 | /******/ l: false,
16 | /******/ exports: {}
17 | /******/ };
18 |
19 | /******/ // Execute the module function
20 | /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
21 |
22 | /******/ // Flag the module as loaded
23 | /******/ module.l = true;
24 |
25 | /******/ // Return the exports of the module
26 | /******/ return module.exports;
27 | /******/ }
28 |
29 |
30 | /******/ // expose the modules object (__webpack_modules__)
31 | /******/ __webpack_require__.m = modules;
32 |
33 | /******/ // expose the module cache
34 | /******/ __webpack_require__.c = installedModules;
35 |
36 | /******/ // identity function for calling harmory imports with the correct context
37 | /******/ __webpack_require__.i = function(value) { return value; };
38 |
39 | /******/ // define getter function for harmory exports
40 | /******/ __webpack_require__.d = function(exports, name, getter) {
41 | /******/ Object.defineProperty(exports, name, {
42 | /******/ configurable: false,
43 | /******/ enumerable: true,
44 | /******/ get: getter
45 | /******/ });
46 | /******/ };
47 |
48 | /******/ // Object.prototype.hasOwnProperty.call
49 | /******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
50 |
51 | /******/ // __webpack_public_path__
52 | /******/ __webpack_require__.p = "";
53 |
54 | /******/ // Load entry module and return exports
55 | /******/ return __webpack_require__(__webpack_require__.s = 3);
56 | /******/ })
57 | /************************************************************************/
58 | /******/ ([
59 | /* 0 */
60 | /***/ function(module, exports, __webpack_require__) {
61 |
62 | "use strict";
63 | /* harmony default export */ exports["a"] = 'body';
64 |
65 |
66 | /***/ },
67 | /* 1 */
68 | /***/ function(module, exports) {
69 |
70 | module.exports = 'footer';
71 |
72 |
73 | /***/ },
74 | /* 2 */
75 | /***/ function(module, exports, __webpack_require__) {
76 |
77 | "use strict";
78 | /* harmony default export */ exports["a"] = 'header';
79 |
80 |
81 | /***/ },
82 | /* 3 */
83 | /***/ function(module, exports, __webpack_require__) {
84 |
85 | "use strict";
86 | /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__components_header__ = __webpack_require__(2);
87 | /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__components_body__ = __webpack_require__(0);
88 | /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__components_footer__ = __webpack_require__(1);
89 | /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__components_footer___default = __WEBPACK_IMPORTED_MODULE_2__components_footer__ && __WEBPACK_IMPORTED_MODULE_2__components_footer__.__esModule ? function() { return __WEBPACK_IMPORTED_MODULE_2__components_footer__['default'] } : function() { return __WEBPACK_IMPORTED_MODULE_2__components_footer__; };
90 | /* harmony import */ __webpack_require__.d(__WEBPACK_IMPORTED_MODULE_2__components_footer___default, 'a', __WEBPACK_IMPORTED_MODULE_2__components_footer___default);
91 |
92 |
93 |
94 |
95 | console.log(__WEBPACK_IMPORTED_MODULE_0__components_header__["a" /* default */], __WEBPACK_IMPORTED_MODULE_1__components_body__["a" /* default */], __WEBPACK_IMPORTED_MODULE_2__components_footer___default.a);
96 |
97 |
98 | /***/ }
99 | /******/ ]);
--------------------------------------------------------------------------------
/webpack2.0/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Webpack2.0 Example
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/webpack2.0/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "webpack-base",
3 | "version": "0.0.1",
4 | "description": "a webpack base repo",
5 | "main": "build/index.js",
6 | "scripts": {
7 | "clean": "rimraf ./build",
8 | "prebuild": "npm run clean",
9 | "build": "webpack --progress --profile"
10 | },
11 | "repository": {
12 | "type": "git",
13 | "url": "git+https://github.com/FrendEr/webpack-base.git"
14 | },
15 | "author": "FrendEr",
16 | "license": "MIT",
17 | "bugs": {
18 | "url": "https://github.com/FrendEr/webpack-base/issues"
19 | },
20 | "homepage": "https://github.com/FrendEr/webpack-base#readme",
21 | "devDependencies": {
22 | "babel-loader": "^6.2.4",
23 | "babel-preset-es2015": "^6.9.0",
24 | "babel-preset-react": "^6.5.0",
25 | "babel-preset-stage-0": "^6.5.0",
26 | "extract-text-webpack-plugin": "^1.0.1",
27 | "rimraf": "^2.5.2",
28 | "webpack": "2.1.0-beta.13"
29 | },
30 | "dependencies": {
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/webpack2.0/src/components/body.js:
--------------------------------------------------------------------------------
1 | export default 'body';
2 |
--------------------------------------------------------------------------------
/webpack2.0/src/components/footer.js:
--------------------------------------------------------------------------------
1 | module.exports = 'footer';
2 |
--------------------------------------------------------------------------------
/webpack2.0/src/components/header.js:
--------------------------------------------------------------------------------
1 | export default 'header';
2 |
--------------------------------------------------------------------------------
/webpack2.0/src/index.js:
--------------------------------------------------------------------------------
1 | import Header from './components/header';
2 | import Body from './components/body';
3 | import Footer from './components/footer';
4 |
5 | console.log(Header, Body, Footer);
6 |
--------------------------------------------------------------------------------
/webpack2.0/webpack.config.js:
--------------------------------------------------------------------------------
1 | const path = require('path');
2 | const webpack = require('webpack');
3 |
4 | /**
5 | * loaders list
6 | */
7 | const loaders = [];
8 |
9 | /**
10 | * plugins list
11 | */
12 | const plugins = [];
13 |
14 | module.exports = {
15 | entry: {
16 | index: path.join(__dirname, 'src/index.js')
17 | },
18 | output: {
19 | path: path.join(__dirname, 'build'),
20 | filename: '[name].js'
21 | },
22 | module: {
23 | loaders: loaders
24 | },
25 | plugins: plugins
26 | };
27 |
--------------------------------------------------------------------------------