├── demo17-clean
├── src
│ ├── app.js
│ └── style.css
├── index.html
├── package.json
├── webpack.config.js
└── readme.md
├── demo11-css
├── src
│ ├── style2.css
│ ├── style1.css
│ └── app.js
├── index.html
├── package.json
├── webpack.config.js
└── readme.md
├── demo07-html
├── src
│ ├── style.css
│ ├── app2.js
│ └── app.js
├── index.html
├── package.json
├── webpack.config.js
└── readme.md
├── demo13-postcss
├── src
│ ├── style2.css
│ ├── style1.css
│ └── app.js
├── postcss.config.js
├── package.json
├── index.html
├── webpack.config.js
└── readme.md
├── demo01
├── src
│ ├── index.js
│ └── hello.js
└── readme.md
├── demo08-SplitChunksPlugin
├── src
│ ├── module2.js
│ ├── module3.js
│ ├── module1.js
│ ├── app2.js
│ └── app1.js
├── index.html
├── package.json
├── webpack.config.js
└── readme.md
├── demo02-config
├── src
│ ├── index.js
│ └── hello.js
├── webpack.config.js
└── readme.md
├── demo12-scss
├── src
│ ├── style2.scss
│ ├── style1.scss
│ └── app.js
├── index.html
├── package.json
├── webpack.config.js
└── readme.md
├── demo14-mini
├── demo14-1-css
│ ├── src
│ │ ├── module1
│ │ │ ├── module1.css
│ │ │ └── module1.js
│ │ ├── module2
│ │ │ ├── module2.css
│ │ │ └── module2.js
│ │ ├── styles
│ │ │ ├── async-style.css
│ │ │ └── common.css
│ │ └── app.js
│ ├── vendor
│ │ ├── vendor.css
│ │ └── vendor.js
│ ├── index.html
│ ├── package.json
│ └── webpack.config.js
├── demo14-2-scss
│ ├── src
│ │ ├── module1
│ │ │ ├── module1.scss
│ │ │ └── module1.js
│ │ ├── module2
│ │ │ ├── module2.scss
│ │ │ └── module2.js
│ │ ├── styles
│ │ │ ├── async-style.scss
│ │ │ └── common.scss
│ │ └── app.js
│ ├── vendor
│ │ ├── vendor.css
│ │ └── vendor.js
│ ├── index.html
│ ├── package.json
│ └── webpack.config.js
└── readme.md
├── demo09-split-vendor-async
├── src
│ ├── async-module1.js
│ ├── async-module2.js
│ ├── module.js
│ └── app.js
├── index.html
├── package.json
├── webpack.config.js
└── readme.md
├── demo16-font
├── src
│ ├── app.js
│ └── assets
│ │ ├── fonts
│ │ ├── icomoon.eot
│ │ ├── icomoon.ttf
│ │ ├── icomoon.woff
│ │ ├── icomoon.css
│ │ └── icomoon.svg
│ │ └── styles
│ │ └── app.css
├── index.html
├── package.json
├── webpack.config.js
└── readme.md
├── demo18-devServer
├── src
│ ├── app.js
│ └── assets
│ │ ├── fonts
│ │ ├── icomoon.eot
│ │ ├── icomoon.ttf
│ │ ├── icomoon.woff
│ │ ├── icomoon.css
│ │ └── icomoon.svg
│ │ └── styles
│ │ └── app.css
├── package.json
├── index.html
├── webpack.config.js
└── readme.md
├── .gitignore
├── demo15-img
├── src
│ ├── assets
│ │ ├── imgs
│ │ │ ├── 1.png
│ │ │ ├── 2.png
│ │ │ └── 3.png
│ │ └── styles
│ │ │ └── app.css
│ └── app.js
├── index.html
├── package.json
├── webpack.config.js
└── readme.md
├── demo03-js-module
├── src
│ ├── lib
│ │ ├── hello-es6.js
│ │ ├── hello-common.js
│ │ └── hello-amd.js
│ └── app.js
├── webpack.config.js
├── index.html
└── readme.md
├── demo19-dev-prod
├── src
│ ├── assets
│ │ ├── images
│ │ │ ├── 1.png
│ │ │ ├── 2.png
│ │ │ ├── 3.png
│ │ │ └── me.jpg
│ │ ├── fonts
│ │ │ ├── icomoon.eot
│ │ │ ├── icomoon.ttf
│ │ │ ├── icomoon.woff
│ │ │ ├── icomoon.css
│ │ │ └── icomoon.svg
│ │ └── styles
│ │ │ ├── app.scss
│ │ │ └── loading.scss
│ ├── app
│ │ └── app.ts
│ └── index.html
├── postcss.config.js
├── tsconfig.json
├── build
│ ├── config.js
│ ├── webpack.dev.conf.js
│ ├── webpack.base.conf.js
│ └── webpack.prod.conf.js
├── package.json
├── .gitignore
└── readme.md
├── demo10-tree-shaking
├── src
│ ├── app.js
│ └── module.js
├── package.json
├── webpack.config.js
├── index.html
└── readme.md
├── demo05-ts
├── src
│ ├── User.ts
│ └── app.ts
├── tsconfig.json
├── index.html
├── package.json
├── webpack.config.js
└── readme.md
├── demo06-babel-ts
├── src
│ ├── User.ts
│ ├── app.ts
│ └── new-features.ts
├── tsconfig.json
├── babel.config.js
├── index.html
├── package.json
├── webpack.config.js
└── readme.md
├── demo04-babel7
├── babel.config.js
├── webpack.config.js
├── index.html
├── package.json
├── src
│ └── app.js
└── readme.md
└── readme.md
/demo17-clean/src/app.js:
--------------------------------------------------------------------------------
1 | const css = import('./style.css');
--------------------------------------------------------------------------------
/demo11-css/src/style2.css:
--------------------------------------------------------------------------------
1 | body {
2 | color: black;
3 | }
4 |
--------------------------------------------------------------------------------
/demo07-html/src/style.css:
--------------------------------------------------------------------------------
1 | body{
2 | background-color: red;
3 | }
--------------------------------------------------------------------------------
/demo13-postcss/src/style2.css:
--------------------------------------------------------------------------------
1 | body {
2 | color: black;
3 | }
4 |
--------------------------------------------------------------------------------
/demo01/src/index.js:
--------------------------------------------------------------------------------
1 | import { sayHello } from './hello';
2 | sayHello();
--------------------------------------------------------------------------------
/demo08-SplitChunksPlugin/src/module2.js:
--------------------------------------------------------------------------------
1 | export const module2 = 'module2';
--------------------------------------------------------------------------------
/demo08-SplitChunksPlugin/src/module3.js:
--------------------------------------------------------------------------------
1 | export const module3 = 'module3';
--------------------------------------------------------------------------------
/demo17-clean/src/style.css:
--------------------------------------------------------------------------------
1 | body {
2 | background-color: red;
3 | }
4 |
--------------------------------------------------------------------------------
/demo02-config/src/index.js:
--------------------------------------------------------------------------------
1 | import { sayHello } from './hello';
2 | sayHello();
--------------------------------------------------------------------------------
/demo08-SplitChunksPlugin/src/module1.js:
--------------------------------------------------------------------------------
1 | export const module1 = 'module1';
2 |
--------------------------------------------------------------------------------
/demo01/src/hello.js:
--------------------------------------------------------------------------------
1 | export function sayHello() {
2 | console.log('hello world!');
3 | }
--------------------------------------------------------------------------------
/demo12-scss/src/style2.scss:
--------------------------------------------------------------------------------
1 | $color: black;
2 | body {
3 | color: $color;
4 | }
5 |
--------------------------------------------------------------------------------
/demo14-mini/demo14-1-css/src/module1/module1.css:
--------------------------------------------------------------------------------
1 | body {
2 | color: black;
3 | }
4 |
--------------------------------------------------------------------------------
/demo14-mini/demo14-2-scss/src/module1/module1.scss:
--------------------------------------------------------------------------------
1 | body {
2 | color: black;
3 | }
4 |
--------------------------------------------------------------------------------
/demo14-mini/demo14-1-css/src/module2/module2.css:
--------------------------------------------------------------------------------
1 | body {
2 | font-size: 100px;
3 | }
4 |
--------------------------------------------------------------------------------
/demo14-mini/demo14-2-scss/src/module2/module2.scss:
--------------------------------------------------------------------------------
1 | body {
2 | font-size: 100px;
3 | }
4 |
--------------------------------------------------------------------------------
/demo02-config/src/hello.js:
--------------------------------------------------------------------------------
1 | export function sayHello() {
2 | console.log('hello world!');
3 | }
--------------------------------------------------------------------------------
/demo09-split-vendor-async/src/async-module1.js:
--------------------------------------------------------------------------------
1 | export const data = 'this is async module1';
2 |
--------------------------------------------------------------------------------
/demo09-split-vendor-async/src/async-module2.js:
--------------------------------------------------------------------------------
1 | export const data = 'this is async module2';
2 |
--------------------------------------------------------------------------------
/demo12-scss/src/style1.scss:
--------------------------------------------------------------------------------
1 | $bgColor: red;
2 | body {
3 | background-color: $bgColor;
4 | }
5 |
--------------------------------------------------------------------------------
/demo14-mini/demo14-1-css/src/styles/async-style.css:
--------------------------------------------------------------------------------
1 | body {
2 | background-color: red;
3 | }
4 |
--------------------------------------------------------------------------------
/demo07-html/src/app2.js:
--------------------------------------------------------------------------------
1 | window.addEventListener("click", function () {
2 | console.log('css');
3 | });
--------------------------------------------------------------------------------
/demo11-css/src/style1.css:
--------------------------------------------------------------------------------
1 | body {
2 | background-color: red;
3 | }
4 | /* console.log('11111'); */
5 |
--------------------------------------------------------------------------------
/demo14-mini/demo14-1-css/src/module2/module2.js:
--------------------------------------------------------------------------------
1 | import './module2.css';
2 | console.log('这里是异步module2');
--------------------------------------------------------------------------------
/demo14-mini/demo14-2-scss/src/styles/async-style.scss:
--------------------------------------------------------------------------------
1 | body {
2 | background-color: red;
3 | }
4 |
--------------------------------------------------------------------------------
/demo16-font/src/app.js:
--------------------------------------------------------------------------------
1 | import "./assets/fonts/icomoon.css";
2 | import "./assets/styles/app.css";
3 |
--------------------------------------------------------------------------------
/demo13-postcss/src/style1.css:
--------------------------------------------------------------------------------
1 | body {
2 | background-color: red;
3 | transform: all 1s;
4 | }
5 |
6 |
--------------------------------------------------------------------------------
/demo14-mini/demo14-1-css/src/module1/module1.js:
--------------------------------------------------------------------------------
1 | import './module1.css';
2 | console.log('这里是同步module1');
3 |
--------------------------------------------------------------------------------
/demo14-mini/demo14-1-css/vendor/vendor.css:
--------------------------------------------------------------------------------
1 | /* 第三方包css */
2 | body {
3 | border: 1px solid black;
4 | }
5 |
--------------------------------------------------------------------------------
/demo18-devServer/src/app.js:
--------------------------------------------------------------------------------
1 | import "./assets/fonts/icomoon.css";
2 | import "./assets/styles/app.css";
3 |
--------------------------------------------------------------------------------
/demo14-mini/demo14-2-scss/src/module2/module2.js:
--------------------------------------------------------------------------------
1 | import './module2.scss';
2 |
3 | console.log('这里是异步module2');
--------------------------------------------------------------------------------
/demo14-mini/demo14-2-scss/vendor/vendor.css:
--------------------------------------------------------------------------------
1 | /* 第三方包css */
2 | body {
3 | border: 1px solid black;
4 | }
5 |
--------------------------------------------------------------------------------
/demo14-mini/demo14-1-css/vendor/vendor.js:
--------------------------------------------------------------------------------
1 | // 这里假设vendor为第三方包
2 | import './vendor.css';
3 | console.log('这里是第三方依赖包');
--------------------------------------------------------------------------------
/demo14-mini/demo14-2-scss/src/module1/module1.js:
--------------------------------------------------------------------------------
1 | import './module1.scss';
2 |
3 | console.log('这里是同步module1');
4 |
--------------------------------------------------------------------------------
/demo14-mini/demo14-2-scss/vendor/vendor.js:
--------------------------------------------------------------------------------
1 | // 这里假设vendor为第三方包
2 | import './vendor.css';
3 | console.log('这里是第三方依赖包');
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | **/node_modules
2 | npm-debug.log
3 | **/package-lock.json
4 | vscode
5 | **/dist
6 | **/.vscode-upload.json
7 | __bak
--------------------------------------------------------------------------------
/demo15-img/src/assets/imgs/1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SimpleCodeCX/simple-webpack-demos/HEAD/demo15-img/src/assets/imgs/1.png
--------------------------------------------------------------------------------
/demo15-img/src/assets/imgs/2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SimpleCodeCX/simple-webpack-demos/HEAD/demo15-img/src/assets/imgs/2.png
--------------------------------------------------------------------------------
/demo15-img/src/assets/imgs/3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SimpleCodeCX/simple-webpack-demos/HEAD/demo15-img/src/assets/imgs/3.png
--------------------------------------------------------------------------------
/demo03-js-module/src/lib/hello-es6.js:
--------------------------------------------------------------------------------
1 | // 使用es6规范来写代码
2 | export default function () {
3 | console.log('es6: hello world!');
4 | }
5 |
--------------------------------------------------------------------------------
/demo14-mini/demo14-1-css/src/styles/common.css:
--------------------------------------------------------------------------------
1 | body {
2 | font-family: monospace, "Microsoft Yahei", "微软雅黑", STXihei, "华文细黑";
3 | }
4 |
--------------------------------------------------------------------------------
/demo14-mini/demo14-2-scss/src/styles/common.scss:
--------------------------------------------------------------------------------
1 | body {
2 | font-family: monospace, "Microsoft Yahei", "微软雅黑", STXihei, "华文细黑";
3 | }
4 |
--------------------------------------------------------------------------------
/demo03-js-module/src/lib/hello-common.js:
--------------------------------------------------------------------------------
1 | // 使用commonjs规范来写代码
2 | module.exports = function () {
3 | console.log('common: hello world!');
4 | };
--------------------------------------------------------------------------------
/demo19-dev-prod/src/assets/images/1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SimpleCodeCX/simple-webpack-demos/HEAD/demo19-dev-prod/src/assets/images/1.png
--------------------------------------------------------------------------------
/demo19-dev-prod/src/assets/images/2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SimpleCodeCX/simple-webpack-demos/HEAD/demo19-dev-prod/src/assets/images/2.png
--------------------------------------------------------------------------------
/demo19-dev-prod/src/assets/images/3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SimpleCodeCX/simple-webpack-demos/HEAD/demo19-dev-prod/src/assets/images/3.png
--------------------------------------------------------------------------------
/demo16-font/src/assets/fonts/icomoon.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SimpleCodeCX/simple-webpack-demos/HEAD/demo16-font/src/assets/fonts/icomoon.eot
--------------------------------------------------------------------------------
/demo16-font/src/assets/fonts/icomoon.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SimpleCodeCX/simple-webpack-demos/HEAD/demo16-font/src/assets/fonts/icomoon.ttf
--------------------------------------------------------------------------------
/demo16-font/src/assets/fonts/icomoon.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SimpleCodeCX/simple-webpack-demos/HEAD/demo16-font/src/assets/fonts/icomoon.woff
--------------------------------------------------------------------------------
/demo19-dev-prod/src/assets/images/me.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SimpleCodeCX/simple-webpack-demos/HEAD/demo19-dev-prod/src/assets/images/me.jpg
--------------------------------------------------------------------------------
/demo19-dev-prod/src/assets/fonts/icomoon.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SimpleCodeCX/simple-webpack-demos/HEAD/demo19-dev-prod/src/assets/fonts/icomoon.eot
--------------------------------------------------------------------------------
/demo19-dev-prod/src/assets/fonts/icomoon.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SimpleCodeCX/simple-webpack-demos/HEAD/demo19-dev-prod/src/assets/fonts/icomoon.ttf
--------------------------------------------------------------------------------
/demo10-tree-shaking/src/app.js:
--------------------------------------------------------------------------------
1 | // 只导入了 sayHello1 ,观察打包后的 bundle 代码,移除了 sayHello2 和 sayHello3 的代码
2 | import { sayHello1 } from './module';
3 |
4 | sayHello1();
--------------------------------------------------------------------------------
/demo13-postcss/postcss.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | parser: 'postcss',
3 | plugins: {
4 | 'autoprefixer': {} /*postcss调用autoprefixer插件*/
5 | }
6 | }
--------------------------------------------------------------------------------
/demo18-devServer/src/assets/fonts/icomoon.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SimpleCodeCX/simple-webpack-demos/HEAD/demo18-devServer/src/assets/fonts/icomoon.eot
--------------------------------------------------------------------------------
/demo18-devServer/src/assets/fonts/icomoon.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SimpleCodeCX/simple-webpack-demos/HEAD/demo18-devServer/src/assets/fonts/icomoon.ttf
--------------------------------------------------------------------------------
/demo18-devServer/src/assets/fonts/icomoon.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SimpleCodeCX/simple-webpack-demos/HEAD/demo18-devServer/src/assets/fonts/icomoon.woff
--------------------------------------------------------------------------------
/demo19-dev-prod/postcss.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | parser: 'postcss',
3 | plugins: {
4 | 'autoprefixer': {} /*postcss调用autoprefixer插件*/
5 | }
6 | }
--------------------------------------------------------------------------------
/demo19-dev-prod/src/assets/fonts/icomoon.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SimpleCodeCX/simple-webpack-demos/HEAD/demo19-dev-prod/src/assets/fonts/icomoon.woff
--------------------------------------------------------------------------------
/demo07-html/src/app.js:
--------------------------------------------------------------------------------
1 | // const css = import('./style.css');
2 | window.addEventListener("click", function () {
3 | const css = import('./style.css');
4 | console.log(css);
5 | });
--------------------------------------------------------------------------------
/demo03-js-module/src/lib/hello-amd.js:
--------------------------------------------------------------------------------
1 | // 使用amd规范来写代码
2 | define(function (require, factory) {
3 | 'use strict';
4 | return function () {
5 | console.log('amd: hello world!');
6 | }
7 | });
--------------------------------------------------------------------------------
/demo15-img/src/app.js:
--------------------------------------------------------------------------------
1 | // 同步加载
2 | import "./assets/styles/app.css";
3 |
4 | // window.addEventListener("click", function () {
5 | // // 试试异步加载? 查看浏览器控制台试试
6 | // import("./assets/styles/app.css");
7 | // });
--------------------------------------------------------------------------------
/demo16-font/src/assets/styles/app.css:
--------------------------------------------------------------------------------
1 | .icons-box {
2 | width: 500px;
3 | height: 100px;
4 | margin: auto;
5 | margin-top: 180px;
6 | }
7 |
8 | .icons-box i {
9 | font-size: 100px;
10 | margin-left: 20px;
11 | }
12 |
--------------------------------------------------------------------------------
/demo18-devServer/src/assets/styles/app.css:
--------------------------------------------------------------------------------
1 | .icons-box {
2 | width: 500px;
3 | height: 100px;
4 | margin: auto;
5 | margin-top: 180px;
6 | }
7 |
8 | .icons-box i {
9 | font-size: 100px;
10 | margin-left: 20px;
11 | }
12 |
--------------------------------------------------------------------------------
/demo05-ts/src/User.ts:
--------------------------------------------------------------------------------
1 | export interface User {
2 | name: String,
3 | age: String,
4 | hobby: String,
5 | options?: Object // 可选参数
6 | }
7 |
8 | // 理解一下 webpack 的 Tree Sharking?
9 | export interface Animal {
10 | name: String
11 | }
12 |
--------------------------------------------------------------------------------
/demo12-scss/src/app.js:
--------------------------------------------------------------------------------
1 | // 同步加载
2 | // import "./style1.scss";
3 | // import "./style2.scss";
4 |
5 |
6 | window.addEventListener("click", function () {
7 | // 试试异步加载? 查看控制台试试
8 | const style1 = import("./style1.scss");
9 | const style2 = import("./style2.scss");
10 | });
--------------------------------------------------------------------------------
/demo11-css/src/app.js:
--------------------------------------------------------------------------------
1 | // 同步加载
2 | import "./style1.css";
3 | import "./style2.css";
4 |
5 |
6 | // window.addEventListener("click", function () {
7 | // // 试试异步加载? 查看浏览器控制台试试
8 | // const style1 = import("./style1.css");
9 | // const style2 = import("./style2.css");
10 | // });
--------------------------------------------------------------------------------
/demo13-postcss/src/app.js:
--------------------------------------------------------------------------------
1 | // 同步加载
2 | import "./style1.css";
3 | import "./style2.css";
4 |
5 |
6 | // window.addEventListener("click", function () {
7 | // // 试试异步加载? 查看浏览器控制台试试
8 | // const style1 = import("./style1.css");
9 | // const style2 = import("./style2.css");
10 | // });
--------------------------------------------------------------------------------
/demo06-babel-ts/src/User.ts:
--------------------------------------------------------------------------------
1 | // interface typescript 的类型
2 | export interface User {
3 | name: String,
4 | age: String,
5 | hobby: String,
6 | options?: Object // 可选参数
7 | }
8 |
9 | // 理解一下 webpack 的 Tree Sharking?
10 | export interface Animal {
11 | name: String
12 | }
13 |
14 |
--------------------------------------------------------------------------------
/demo10-tree-shaking/src/module.js:
--------------------------------------------------------------------------------
1 | export const sayHello1 = () => {
2 | console.log('Hi I want to say hello1');
3 | }
4 |
5 | export const sayHello2 = () => {
6 | console.log('Hi I want to say hello2');
7 | }
8 |
9 | export const sayHello3 = () => {
10 | console.log('Hi I want to say hello3');
11 | }
--------------------------------------------------------------------------------
/demo08-SplitChunksPlugin/src/app2.js:
--------------------------------------------------------------------------------
1 | import { module1 } from './module1';
2 | import { module2 } from './module2';
3 | import { module3 } from './module3';
4 |
5 | // module1 module2 module3 都属于同步加载(注意对比app1.js)
6 | console.log('app2: ', module1);
7 | console.log('app2: ', module2);
8 | console.log('app2: ', module3);
--------------------------------------------------------------------------------
/demo09-split-vendor-async/src/module.js:
--------------------------------------------------------------------------------
1 | export const sayHello1 = () => {
2 | console.log('Hi I want to say hello1');
3 | }
4 |
5 | export const sayHello2 = () => {
6 | console.log('Hi I want to say hello2');
7 | }
8 |
9 | export const sayHello3 = () => {
10 | console.log('Hi I want to say hello3');
11 | }
--------------------------------------------------------------------------------
/demo05-ts/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "module": "commonjs",
4 | "target": "es5",
5 | "allowJs": true,
6 | "lib": [
7 | "es2018",
8 | "dom"
9 | ],
10 | },
11 | "include": [
12 | "./src/*"
13 | ],
14 | "exclude": [
15 | "./node_modules"
16 | ]
17 | }
--------------------------------------------------------------------------------
/demo06-babel-ts/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "module": "commonjs",
4 | "target": "es5",
5 | "allowJs": true,
6 | "lib": [
7 | "es2018",
8 | "dom"
9 | ],
10 | },
11 | "include": [
12 | "./src/*"
13 | ],
14 | "exclude": [
15 | "./node_modules"
16 | ]
17 | }
--------------------------------------------------------------------------------
/demo05-ts/src/app.ts:
--------------------------------------------------------------------------------
1 | import { User } from './User';
2 |
3 | const user1: User = {
4 | name: 'simple',
5 | age: '25',
6 | hobby: 'play the guitar'
7 | };
8 |
9 | // 这里参数不够,tsc编译器会报错,webpack编译不通过
10 | // const user2: User = {
11 | // name: 'simple2',
12 | // age: '25'
13 | // };
14 |
15 | console.log(user1);
16 |
17 |
--------------------------------------------------------------------------------
/demo02-config/webpack.config.js:
--------------------------------------------------------------------------------
1 | const path = require("path");
2 |
3 | module.exports = {
4 | mode: 'production' || 'development',
5 | entry: {
6 | src: "./src/index.js", // 入口文件
7 | },
8 | output: {
9 | path: path.resolve(__dirname, "dist"), // 打包后的输出目录
10 | filename: "app.bundle.js",
11 | }
12 | };
13 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/demo03-js-module/src/app.js:
--------------------------------------------------------------------------------
1 | /**
2 | * webpack支持ES6、CommonJs和AMD规范
3 | */
4 |
5 | // ES6
6 | import es6Hello from './lib/hello-es6';
7 | es6Hello();
8 |
9 | // CommonJs
10 | var commonHello = require('./lib/hello-common');
11 | commonHello();
12 |
13 | // AMD
14 | require(['./lib/hello-amd'], function (helloAmd) {
15 | helloAmd();
16 | });
--------------------------------------------------------------------------------
/demo17-clean/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | Webpack4系列实践Demo
9 |
10 |
11 |
12 | demo17 clean
13 |
14 |
15 |
--------------------------------------------------------------------------------
/demo04-babel7/babel.config.js:
--------------------------------------------------------------------------------
1 | const presets = [
2 | [
3 | "@babel/env",
4 | {
5 | targets: { // 配置需要兼容的浏览器
6 | edge: "17",
7 | firefox: "60",
8 | chrome: "67",
9 | safari: "11.1",
10 | ie: "11"
11 | },
12 | useBuiltIns: "usage"
13 | },
14 | ],
15 | ];
16 |
17 | module.exports = { presets };
--------------------------------------------------------------------------------
/demo10-tree-shaking/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "demo10",
3 | "version": "1.0.0",
4 | "description": "webpack tree shaking",
5 | "main": "index.js",
6 | "scripts": {
7 | "test": "echo \"Error: no test specified\" && exit 1"
8 | },
9 | "keywords": [
10 | "webpack",
11 | "tree shaking"
12 | ],
13 | "author": "Simple",
14 | "license": "ISC"
15 | }
--------------------------------------------------------------------------------
/demo13-postcss/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "demo13",
3 | "version": "1.0.0",
4 | "description": "webpack postcss-loader",
5 | "main": "index.js",
6 | "scripts": {
7 | "test": "echo \"Error: no test specified\" && exit 1"
8 | },
9 | "keywords": [
10 | "webpack",
11 | "postcss-loader"
12 | ],
13 | "author": "Simple",
14 | "license": "ISC"
15 | }
--------------------------------------------------------------------------------
/demo03-js-module/webpack.config.js:
--------------------------------------------------------------------------------
1 | const path = require("path");
2 |
3 | module.exports = {
4 | mode: 'production' || 'development',
5 | entry: {
6 | app: "./src/app.js"
7 | },
8 | output: {
9 | publicPath: __dirname + "/dist/", // 打包后资源文件的引用会基于此路径
10 | path: path.resolve(__dirname, "dist"), // 打包后的输出目录
11 | filename: "app.bundle.js"
12 | }
13 | };
14 |
--------------------------------------------------------------------------------
/demo06-babel-ts/src/app.ts:
--------------------------------------------------------------------------------
1 | import "@babel/polyfill";
2 | import './new-features';
3 | import { User } from './User';
4 |
5 | const user1: User = {
6 | name: 'simple',
7 | age: '25',
8 | hobby: 'play the guitar'
9 | };
10 |
11 | // 这里参数不够,tsc编译器会报错,webpack编译不通过
12 | // const user2: User = {
13 | // name: 'simple2',
14 | // age: '25'
15 | // };
16 |
17 | console.log(user1);
18 |
19 |
--------------------------------------------------------------------------------
/demo06-babel-ts/babel.config.js:
--------------------------------------------------------------------------------
1 | const presets = [
2 | [
3 | "@babel/env",
4 | {
5 | targets: {
6 | edge: "17",
7 | firefox: "60",
8 | chrome: "67",
9 | safari: "11.1",
10 | ie: "11"
11 | },
12 | // useBuiltIns: "usage" // 和ts结合的情况,这个属性无效,需要手动import "@babel/polyfill";
13 | },
14 | ],
15 | ];
16 |
17 | module.exports = { presets };
--------------------------------------------------------------------------------
/demo07-html/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | Webpack4系列实践Demo
9 |
10 |
11 |
12 | demo07 html
13 |
14 | 点击屏幕后,背景变红
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/demo11-css/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | Webpack4系列实践Demo
9 |
10 |
11 |
12 | demo11 css
13 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/demo15-img/src/assets/styles/app.css:
--------------------------------------------------------------------------------
1 | *,
2 | body {
3 | margin: 0;
4 | padding: 0;
5 | }
6 |
7 | .container div{
8 | width:200px;
9 | height: 200px;
10 | float: left;
11 | }
12 | .div1{
13 | background: url("../imgs/1.png") no-repeat;
14 | }
15 |
16 | .div2{
17 | background: url("../imgs/2.png") no-repeat;
18 | }
19 |
20 | .div3{
21 | background: url("../imgs/3.png") no-repeat;
22 | }
--------------------------------------------------------------------------------
/demo19-dev-prod/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "module": "commonjs",
4 | "target": "es5",
5 | "allowJs": true,
6 | "lib": [
7 | "dom",
8 | "es5",
9 | "es6",
10 | "es7",
11 | "es2018",
12 | "es2015.promise"
13 | ],
14 | },
15 | "include": [
16 | "./src/app/*"
17 | ],
18 | "exclude": [
19 | "./node_modules"
20 | ]
21 | }
--------------------------------------------------------------------------------
/demo10-tree-shaking/webpack.config.js:
--------------------------------------------------------------------------------
1 | const path = require("path");
2 |
3 | module.exports = {
4 | mode: "production" || "development", // tree shaking 需要使用 "production" 模式
5 | entry: {
6 | app: "./src/app.js"
7 | },
8 | output: {
9 | publicPath: __dirname + "/dist/", // 打包后资源文件的引用会基于此路径
10 | path: path.resolve(__dirname, "dist"), // 打包后的输出目录
11 | filename: "[name].bundle.js"
12 | }
13 | };
--------------------------------------------------------------------------------
/demo10-tree-shaking/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | Webpack4系列实践Demo
9 |
10 |
11 |
12 | demo10 tree shaking
13 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/demo14-mini/demo14-1-css/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | Webpack4系列实践Demo
9 |
10 |
11 |
12 | demo14-1 css
13 |
14 | 点击屏幕后,加载异步模块,背景变红
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/demo14-mini/demo14-2-scss/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | Webpack4系列实践Demo
9 |
10 |
11 |
12 | demo14-2 scss
13 |
14 | 点击屏幕后,加载异步模块,背景变红
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/demo04-babel7/webpack.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | mode: 'production' || 'development',
3 | entry: {
4 | app: "./src/app.js"
5 | },
6 | output: {
7 | filename: "app.bundle.js"
8 | },
9 | module: {
10 | rules: [
11 | {
12 | test: /\.js$/,
13 | exclude: /(node_modules)/,
14 | use: {
15 | loader: "babel-loader"
16 | }
17 | }
18 | ]
19 | }
20 | };
21 |
--------------------------------------------------------------------------------
/demo08-SplitChunksPlugin/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | Webpack4系列实践Demo
9 |
10 |
11 |
12 | demo08 SplitChunksPlugin
13 |
14 | 请查看控制台,3秒后会异步加载模块
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/demo19-dev-prod/build/config.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 | const path = require('path');
3 |
4 | module.exports = {
5 | dev: {
6 | publicPath: '/',
7 | filename: '[name].[chunkhash:8].bundle.js',
8 | chunkFilename: '[name].[chunkhash:8].chunk.js'
9 | },
10 | prod: {
11 | publicPath: './',
12 | filename: '[id].[name].[chunkhash:8].bundle.js',
13 | chunkFilename: '[id].[name].[chunkhash:8].chunk.js'
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/demo09-split-vendor-async/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | Webpack4系列实践Demo
9 |
10 |
11 |
12 | demo09 splitChunks vendor async
13 |
14 | 请查看控制台,3秒后会异步加载模块
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/demo05-ts/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | Webpack4系列实践Demo
9 |
10 |
11 |
12 | demo05 ts
13 |
14 | 请查看控制台,console
15 |
16 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/demo05-ts/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "demo05",
3 | "version": "1.0.0",
4 | "description": "demo05",
5 | "main": "index.js",
6 | "scripts": {
7 | "test": "echo \"Error: no test specified\" && exit 1"
8 | },
9 | "keywords": [
10 | "webpack",
11 | "typescript"
12 | ],
13 | "author": "Simple",
14 | "license": "ISC",
15 | "devDependencies": {
16 | "ts-loader": "^5.3.3",
17 | "typescript": "^3.3.3333"
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/demo03-js-module/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | Webpack4系列实践Demo
9 |
10 |
11 |
12 | demo03 js module
13 |
14 | 请查看控制台,console
15 |
16 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/demo04-babel7/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | Webpack4系列实践Demo
9 |
10 |
11 |
12 | demo04 babel7
13 |
14 | 请分别用 ie 和 Chrome 查看控制台,console
15 |
16 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/demo18-devServer/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "scripts": {
3 | "dev": "webpack-dev-server --open"
4 | },
5 | "devDependencies": {
6 | "clean-webpack-plugin": "^1.0.1",
7 | "css-loader": "^1.0.0",
8 | "file-loader": "^1.1.11",
9 | "html-webpack-plugin": "^3.2.0",
10 | "mini-css-extract-plugin": "^0.5.0",
11 | "url-loader": "^1.0.1",
12 | "webpack": "^4.29.6",
13 | "webpack-cli": "^3.2.3",
14 | "webpack-dev-server": "^3.2.1"
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/demo06-babel-ts/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | Webpack4系列实践Demo
9 |
10 |
11 |
12 | demo06 babel ts
13 |
14 | 请分别用 ie 和 Chrome 查看控制台,console
15 |
16 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/demo08-SplitChunksPlugin/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "demo08",
3 | "version": "1.0.0",
4 | "description": "webpack splitChunks",
5 | "main": "index.js",
6 | "scripts": {
7 | "test": "echo \"Error: no test specified\" && exit 1"
8 | },
9 | "keywords": [
10 | "webpack",
11 | "splitChunks"
12 | ],
13 | "author": "Simple",
14 | "license": "ISC",
15 | "devDependencies": {
16 | "html-webpack-plugin": "^3.2.0",
17 | "webpack": "^4.29.6"
18 | }
19 | }
--------------------------------------------------------------------------------
/demo11-css/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "demo11",
3 | "version": "1.0.0",
4 | "description": "webpack css",
5 | "main": "index.js",
6 | "scripts": {
7 | "test": "echo \"Error: no test specified\" && exit 1"
8 | },
9 | "keywords": [
10 | "webpack",
11 | "css"
12 | ],
13 | "author": "Simple",
14 | "license": "ISC",
15 | "devDependencies": {
16 | "css-loader": "^2.1.0",
17 | "file-loader": "^3.0.1",
18 | "style-loader": "^0.23.1"
19 | }
20 | }
--------------------------------------------------------------------------------
/demo13-postcss/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | Webpack4系列实践Demo
9 |
10 |
11 |
12 | demo13 postcss
13 |
14 |
15 | 查看body的transform样式被添加了前缀。
16 |
17 |
18 |
19 |
20 |
--------------------------------------------------------------------------------
/demo12-scss/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | Webpack4系列实践Demo
9 |
10 |
11 |
12 | demo12 scss
13 |
14 | 点击屏幕后,背景变红
15 |
16 |
17 | 并且可以通过控制台看到异步加载
18 |
19 |
20 |
21 |
22 |
--------------------------------------------------------------------------------
/demo07-html/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "demo07",
3 | "version": "1.0.0",
4 | "description": "webpack HtmlWebpackPlugin",
5 | "main": "index.js",
6 | "scripts": {
7 | "test": "echo \"Error: no test specified\" && exit 1"
8 | },
9 | "keywords": [
10 | "webpack",
11 | "HtmlWebpackPlugin"
12 | ],
13 | "author": "Simple",
14 | "license": "ISC",
15 | "devDependencies": {
16 | "css-loader": "^2.1.0",
17 | "html-webpack-plugin": "^3.2.0",
18 | "style-loader": "^0.23.1",
19 | "webpack": "^4.29.5"
20 | }
21 | }
--------------------------------------------------------------------------------
/demo12-scss/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "demo12",
3 | "version": "1.0.0",
4 | "description": "webpack scss",
5 | "main": "index.js",
6 | "scripts": {
7 | "test": "echo \"Error: no test specified\" && exit 1"
8 | },
9 | "keywords": [
10 | "webpack",
11 | "scss"
12 | ],
13 | "author": "Simple",
14 | "license": "ISC",
15 | "devDependencies": {
16 | "css-loader": "^2.1.0",
17 | "file-loader": "^3.0.1",
18 | "node-sass": "^4.11.0",
19 | "sass-loader": "^7.1.0",
20 | "style-loader": "^0.23.1"
21 | }
22 | }
--------------------------------------------------------------------------------
/demo16-font/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | Webpack4系列实践Demo
9 |
10 |
11 |
12 | demo16 font
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
--------------------------------------------------------------------------------
/demo04-babel7/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "demo04",
3 | "version": "1.0.0",
4 | "description": "webpack babel7",
5 | "main": "index.js",
6 | "scripts": {
7 | "test": "echo \"Error: no test specified\" && exit 1"
8 | },
9 | "keywords": [
10 | "webpack",
11 | "babel7"
12 | ],
13 | "author": "Simple",
14 | "license": "ISC",
15 | "dependencies": {
16 | "@babel/polyfill": "^7.2.5"
17 | },
18 | "devDependencies": {
19 | "@babel/core": "^7.3.4",
20 | "@babel/preset-env": "^7.3.4",
21 | "babel-loader": "^8.0.5"
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/demo18-devServer/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | Webpack4系列实践Demo
9 |
10 |
11 |
12 | demo18 devServer
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
--------------------------------------------------------------------------------
/demo09-split-vendor-async/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "demo09",
3 | "version": "1.0.0",
4 | "description": "webpack splitChunks",
5 | "main": "index.js",
6 | "scripts": {
7 | "test": "echo \"Error: no test specified\" && exit 1"
8 | },
9 | "keywords": [
10 | "webpack",
11 | "splitChunks"
12 | ],
13 | "author": "Simple",
14 | "license": "ISC",
15 | "devDependencies": {
16 | "html-webpack-plugin": "^3.2.0",
17 | "webpack": "^4.29.6"
18 | },
19 | "dependencies": {
20 | "axios": "^0.18.0",
21 | "lodash": "^4.17.11"
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/demo14-mini/demo14-1-css/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "demo14-css",
3 | "version": "1.0.0",
4 | "description": "webpack mini-css-extract-plugin",
5 | "main": "index.js",
6 | "scripts": {
7 | "test": "echo \"Error: no test specified\" && exit 1"
8 | },
9 | "keywords": [
10 | "webpack",
11 | "mini-css-extract-plugin"
12 | ],
13 | "author": "Simple",
14 | "license": "ISC",
15 | "devDependencies": {
16 | "css-loader": "^2.1.0",
17 | "html-webpack-plugin": "^3.2.0",
18 | "mini-css-extract-plugin": "^0.5.0",
19 | "webpack": "^4.29.5"
20 | }
21 | }
--------------------------------------------------------------------------------
/demo15-img/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | Webpack4系列实践Demo
9 |
10 |
11 |
12 | demo15 img
13 |
20 |
21 |
22 |
23 |
--------------------------------------------------------------------------------
/demo05-ts/webpack.config.js:
--------------------------------------------------------------------------------
1 | const path = require("path");
2 | module.exports = {
3 | mode: 'production' || 'development',
4 | entry: {
5 | index: "./src/app.ts"
6 | },
7 | output: {
8 | publicPath: __dirname + "/dist/", // 打包后资源文件的引用会基于此路径
9 | path: path.resolve(__dirname, "dist"), // 打包后的输出目录
10 | filename: "app.bundle.js"
11 | },
12 | module: {
13 | rules: [
14 | {
15 | test: /\.ts?$/,
16 | use: 'ts-loader',
17 | exclude: /node_modules/
18 | }
19 | ]
20 | },
21 | resolve: {
22 | extensions: ['.ts', '.js']
23 | }
24 | }
--------------------------------------------------------------------------------
/demo15-img/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "demo15",
3 | "version": "1.0.0",
4 | "description": "webpack url-loader",
5 | "main": "index.js",
6 | "scripts": {
7 | "test": "echo \"Error: no test specified\" && exit 1"
8 | },
9 | "keywords": [
10 | "webpack",
11 | "url-loader"
12 | ],
13 | "author": "Simple",
14 | "license": "ISC",
15 | "devDependencies": {
16 | "css-loader": "^2.1.0",
17 | "file-loader": "^3.0.1",
18 | "html-webpack-plugin": "^3.2.0",
19 | "style-loader": "^0.23.1",
20 | "url-loader": "^1.1.2",
21 | "webpack": "^4.29.6"
22 | }
23 | }
--------------------------------------------------------------------------------
/demo17-clean/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "demo17",
3 | "version": "1.0.0",
4 | "description": "webpack clean-webpack-plugin",
5 | "main": "index.js",
6 | "scripts": {
7 | "test": "echo \"Error: no test specified\" && exit 1"
8 | },
9 | "keywords": [
10 | "webpack",
11 | "clean-webpack-plugin"
12 | ],
13 | "author": "Simple",
14 | "license": "ISC",
15 | "devDependencies": {
16 | "clean-webpack-plugin": "^1.0.1",
17 | "css-loader": "^2.1.0",
18 | "html-webpack-plugin": "^3.2.0",
19 | "style-loader": "^0.23.1",
20 | "webpack": "^4.29.5"
21 | }
22 | }
--------------------------------------------------------------------------------
/demo14-mini/demo14-1-css/src/app.js:
--------------------------------------------------------------------------------
1 | // 同步加载common.css
2 | import './styles/common.css';
3 |
4 | // 同步加载module1.js
5 | import * as module1 from './module1/module1';
6 |
7 | // 同步加载第三方包vendor.js
8 | import * as vendor from '../vendor/vendor';
9 |
10 | window.addEventListener('click', function () {
11 | // 异步加载module2.js
12 | import(/* webpackChunkName: 'module2'*/ './module2/module2').then(_ => {
13 | console.log('加载异步module2成功');
14 | });
15 | // async-style.css
16 | import(/* webpackChunkName: 'async-style'*/'./styles/async-style.css').then(_ => {
17 | console.log('加载异步async-style.css成功');
18 | });
19 |
20 | });
21 |
--------------------------------------------------------------------------------
/demo14-mini/demo14-2-scss/src/app.js:
--------------------------------------------------------------------------------
1 | // 同步加载common.scss
2 | import './styles/common.scss';
3 |
4 | // 同步加载module1.js
5 | import * as module1 from './module1/module1';
6 |
7 | // 同步加载第三方包vendor.js
8 | import * as vendor from '../vendor/vendor';
9 |
10 | window.addEventListener('click', function () {
11 | // 异步加载module2.js
12 | import(/* webpackChunkName: 'module2'*/ './module2/module2').then(_ => {
13 | console.log('加载异步module2成功');
14 | });
15 | // async-style.scss
16 | import(/* webpackChunkName: 'async-style'*/'./styles/async-style.scss').then(_ => {
17 | console.log('加载异步async-style.scss成功');
18 | });
19 |
20 | });
21 |
--------------------------------------------------------------------------------
/demo16-font/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "demo16",
3 | "version": "1.0.0",
4 | "description": "webpack url-loader",
5 | "main": "index.js",
6 | "scripts": {
7 | "test": "echo \"Error: no test specified\" && exit 1"
8 | },
9 | "keywords": [
10 | "webpack",
11 | "url-loader"
12 | ],
13 | "author": "Simple",
14 | "license": "ISC",
15 | "devDependencies": {
16 | "css-loader": "^1.0.0",
17 | "file-loader": "^1.1.11",
18 | "html-webpack-plugin": "^3.2.0",
19 | "mini-css-extract-plugin": "^0.5.0",
20 | "style-loader": "^0.21.0",
21 | "url-loader": "^1.0.1",
22 | "webpack": "^4.29.6"
23 | }
24 | }
--------------------------------------------------------------------------------
/demo14-mini/demo14-2-scss/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "demo14-scss",
3 | "version": "1.0.0",
4 | "description": "webpack mini-css-extract-plugin",
5 | "main": "index.js",
6 | "scripts": {
7 | "test": "echo \"Error: no test specified\" && exit 1"
8 | },
9 | "keywords": [
10 | "webpack",
11 | "mini-css-extract-plugin"
12 | ],
13 | "author": "Simple",
14 | "license": "ISC",
15 | "devDependencies": {
16 | "css-loader": "^2.1.0",
17 | "node-sass": "^4.11.0",
18 | "sass-loader": "^7.1.0",
19 | "html-webpack-plugin": "^3.2.0",
20 | "mini-css-extract-plugin": "^0.5.0",
21 | "webpack": "^4.29.5"
22 | }
23 | }
--------------------------------------------------------------------------------
/demo06-babel-ts/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "demo06",
3 | "version": "1.0.0",
4 | "description": "webpack @babel typescript",
5 | "main": "index.js",
6 | "scripts": {
7 | "test": "echo \"Error: no test specified\" && exit 1"
8 | },
9 | "keywords": [
10 | "webpack",
11 | "@babel",
12 | "typescript"
13 | ],
14 | "author": "Simple",
15 | "license": "ISC",
16 | "devDependencies": {
17 | "@babel/core": "^7.3.3",
18 | "@babel/preset-env": "^7.3.1",
19 | "babel-loader": "^8.0.5",
20 | "ts-loader": "^5.3.3",
21 | "typescript": "^3.3.3333"
22 | },
23 | "dependencies": {
24 | "@babel/polyfill": "^7.2.5"
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/demo08-SplitChunksPlugin/src/app1.js:
--------------------------------------------------------------------------------
1 | import { module1 } from './module1';
2 | import { module2 } from './module2';
3 |
4 | // module1 module2 属于同步加载
5 | console.log('app1: ', module1);
6 | console.log('app1: ', module2);
7 |
8 | // 通过require.ensure对module3.js进行加载调用(此写法在ts模式支持)
9 | setTimeout(() => {
10 | require.ensure(
11 | [],
12 | function () {
13 | const module3 = require("./module3");
14 | console.log('app1: ', module3.module3);
15 | },
16 | "module3"
17 | );
18 | }, 3000);
19 |
20 | // // 异步加载的另一种写法(此写法在ts模式下不支持)
21 | // setTimeout(() => {
22 | // import(/* webpackChunkName: 'module3'*/ "./module3").then(function (module3) {
23 | // console.log(module3.module3);
24 | // });
25 | // }, 3000);
26 |
--------------------------------------------------------------------------------
/demo06-babel-ts/webpack.config.js:
--------------------------------------------------------------------------------
1 | const path = require("path");
2 | module.exports = {
3 | mode: 'production' || 'development',
4 | entry: {
5 | index: "./src/app.ts"
6 | },
7 | output: {
8 | publicPath: __dirname + "/dist/", // 打包后资源文件的引用会基于此路径
9 | path: path.resolve(__dirname, "dist"), // 打包后的输出目录
10 | filename: "app.bundle.js"
11 | },
12 | module: {
13 | rules: [
14 | {
15 | test: /\.js$/,
16 | exclude: /(node_modules)/,
17 | use: {
18 | loader: "babel-loader"
19 | }
20 | },
21 | {
22 | test: /\.ts?$/,
23 | use: 'ts-loader',
24 | exclude: /node_modules/
25 | }
26 | ]
27 | },
28 | resolve: {
29 | extensions: ['.ts', '.js']
30 | }
31 | }
--------------------------------------------------------------------------------
/demo19-dev-prod/src/app/app.ts:
--------------------------------------------------------------------------------
1 | import '../assets/styles/app.scss';
2 | import "../assets/fonts/icomoon.css";
3 | import 'swiper/dist/css/swiper.min.css';
4 | import * as Swiper from 'swiper/dist/js/swiper';
5 |
6 | var iframe = document.getElementById("iframe1");
7 | if (iframe['attachEvent']) {
8 | iframe['attachEvent']("onload", function () {
9 | new Swiper('.swiper-container', {
10 | autoplay: {
11 | delay: 50
12 | },
13 | loop: true,
14 | speed: 50
15 | });
16 | });
17 | } else {
18 | iframe.onload = function () {
19 | new Swiper('.swiper-container', {
20 | autoplay: {
21 | delay: 5000
22 | },
23 | loop: true,
24 | speed: 1500
25 | });
26 | };
27 | }
28 |
29 |
30 |
31 |
32 |
--------------------------------------------------------------------------------
/demo09-split-vendor-async/src/app.js:
--------------------------------------------------------------------------------
1 | import { sayHello1, sayHello2, sayHello3 } from './module';
2 |
3 | sayHello1();
4 | sayHello2();
5 | sayHello3();
6 |
7 |
8 | // 异步加载async-module1
9 | setTimeout(() => {
10 | require.ensure(
11 | [],
12 | function () {
13 | const asyncModule = require("./async-module1");
14 | console.log(asyncModule.data);
15 | },
16 | "module1"
17 | );
18 | }, 3000);
19 |
20 | // 异步加载async-module2
21 | setTimeout(() => {
22 | require.ensure(
23 | [],
24 | function () {
25 | const asyncModule2 = require("./async-module2");
26 | console.log(asyncModule2.data);
27 | },
28 | "module2"
29 | );
30 | }, 3000);
31 |
32 |
33 | // 引用第三方库
34 | // https://github.com/lodash/lodash
35 | import * as _ from "lodash";
36 | // https://github.com/axios/axios
37 | import * as axios from "axios";
38 |
39 | console.log(_);
40 | console.log(axios);
41 |
--------------------------------------------------------------------------------
/demo04-babel7/src/app.js:
--------------------------------------------------------------------------------
1 | // import "@babel/polyfill";
2 | let func = () => { };
3 |
4 | /**
5 | * Array.prototype.includes 不兼容 ie 11,详见 mdn 文档
6 | * https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/includes
7 | * 所以需要通过 @babel/polyfill 来实现
8 | */
9 | const pets = ['cat', 'dog', 'bat'];
10 | console.log(pets.includes('cat'));
11 |
12 | /**
13 | * new Set不兼容 ie 11,详见 mdn 文档
14 | * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set
15 | */
16 | const set1 = new Set([1, 2, 3, 4, 5]);
17 | console.log(set1.has(1));
18 |
19 | /**
20 | * WeakMap 的 set方法在 ie 11 下不支持,详见 mdn 文档
21 | * https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/WeakMap
22 | */
23 | var o1 = {},
24 | o2 = function () { },
25 | o3 = window;
26 | let weakmap = new WeakMap();
27 | weakmap.set(o1, 1);
28 | weakmap.set(o2, 2);
29 | weakmap.set(o3, 3);
30 | console.log(weakmap.get(o1)); // => 1
--------------------------------------------------------------------------------
/demo19-dev-prod/build/webpack.dev.conf.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 | const path = require('path');
3 | const merge = require('webpack-merge')
4 | const baseWebpackConfig = require('./webpack.base.conf')
5 |
6 | const devWebpackConfig = merge(baseWebpackConfig, {
7 | devtool: "source-map",
8 | devServer: {
9 | contentBase: path.join(__dirname, "../dist/"),
10 | port: 8000,
11 | hot: false,
12 | overlay: true,
13 | historyApiFallback: {
14 | rewrites: [{ from: /.*/, to: "/index.html" }]
15 | }
16 | },
17 | module: {
18 | rules: [
19 | {
20 | test: /\.(sa|sc|c)ss$/,
21 | use: [
22 | "style-loader",
23 | "css-loader", // 将 CSS 转化成 js 模块
24 | {
25 | loader: 'postcss-loader' // 配置在postcss.config.js
26 | },
27 | "sass-loader" // 将 Sass/Scss 编译成 CSS
28 | ]
29 | }
30 | ]
31 | },
32 | plugins: []
33 | });
34 | module.exports = devWebpackConfig;
35 |
--------------------------------------------------------------------------------
/demo07-html/webpack.config.js:
--------------------------------------------------------------------------------
1 | const path = require("path");
2 | const HtmlWebpackPlugin = require("html-webpack-plugin");
3 |
4 | module.exports = {
5 | entry: {
6 | app: "./src/app.js"
7 | // app2: "./src/app2.js"
8 | },
9 | output: {
10 | publicPath: __dirname + "/dist/", // 打包后资源文件的引用会基于此路径
11 | path: path.resolve(__dirname, "dist"), // 打包后的输出目录
12 | filename: "[name].bundle.js"
13 | },
14 | module: {
15 | rules: [
16 | {
17 | test: /\.css$/,
18 | // css处理为style标签
19 | use: [
20 | "style-loader",
21 | 'css-loader'
22 | ]
23 | }
24 | ]
25 | },
26 | plugins: [
27 | new HtmlWebpackPlugin({
28 | title: '设置html的title',// 当设置了template选项后,title选项将失效
29 | filename: "index.html",
30 | template: "./index.html",
31 | // chunks: ["app"], // entry中的app入口才会被打包
32 | minify: {
33 | // 压缩选项
34 | collapseWhitespace: true
35 | }
36 | }),
37 | ]
38 | };
39 |
--------------------------------------------------------------------------------
/demo17-clean/webpack.config.js:
--------------------------------------------------------------------------------
1 | const path = require("path");
2 | const HtmlWebpackPlugin = require("html-webpack-plugin");
3 | const CleanWebpackPlugin = require("clean-webpack-plugin");
4 |
5 | module.exports = {
6 | entry: {
7 | app: "./src/app.js"
8 | },
9 | output: {
10 | publicPath: __dirname + "/dist/", // 打包后资源文件的引用会基于此路径
11 | path: path.resolve(__dirname, "dist"), // 打包后的输出目录
12 | filename: "[name]-[hash].bundle.js"
13 | },
14 | module: {
15 | rules: [
16 | {
17 | test: /\.css$/,
18 | // css处理为style标签
19 | use: [
20 | "style-loader",
21 | 'css-loader'
22 | ]
23 | }
24 | ]
25 | },
26 | plugins: [
27 | new HtmlWebpackPlugin({
28 | title: '设置html的title',// 当设置了template选项后,title选项将失效
29 | filename: "index.html",
30 | template: "./index.html",
31 | minify: {
32 | // 压缩选项
33 | collapseWhitespace: true
34 | }
35 | }),
36 | new CleanWebpackPlugin(["dist"])
37 | ]
38 | };
39 |
--------------------------------------------------------------------------------
/demo06-babel-ts/src/new-features.ts:
--------------------------------------------------------------------------------
1 | // 使用javasript的新特性,比如Promise,WeadMap,Array.prototype.includes等
2 | // 不兼容ie 11,因此需要在应用入口(app.ts)导入@babel/polyfill包,在ie 11浏览器进行测试
3 |
4 | /**
5 | * Array.prototype.includes 不兼容ie 11,详见mdn文档
6 | * https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/includes
7 | * 所以需要通过@babel/polyfill来实现
8 | */
9 | const pets = ['cat', 'dog', 'bat'];
10 | console.log(pets.includes('cat'));
11 |
12 | /**
13 | * new Set不兼容ie 11,详见mdn文档
14 | * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set
15 | */
16 | const set1 = new Set([1, 2, 3, 4, 5]);
17 | console.log(set1.has(1));
18 |
19 | /**
20 | * WeakMap 的 set方法在ie 11下不支持,详见mdn文档
21 | * https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/WeakMap
22 | */
23 | var o1 = {},
24 | o2 = function () { },
25 | o3 = window;
26 | let weakmap = new WeakMap();
27 | weakmap.set(o1, 1);
28 | weakmap.set(o2, 2);
29 | weakmap.set(o3, 3);
30 | console.log(weakmap.get(o1)); // => 1
--------------------------------------------------------------------------------
/demo16-font/src/assets/fonts/icomoon.css:
--------------------------------------------------------------------------------
1 | @font-face {
2 | font-family: "icomoon";
3 | src: url("./icomoon.eot?nn7hff");
4 | src: url("./icomoon.eot?nn7hff#iefix") format("embedded-opentype"),
5 | url("./icomoon.ttf?nn7hff") format("truetype"),
6 | url("./icomoon.woff?nn7hff") format("woff"),
7 | url("./icomoon.svg?nn7hff#icomoon") format("svg");
8 | font-weight: normal;
9 | font-style: normal;
10 | }
11 |
12 | [class^="icon-"],
13 | [class*=" icon-"] {
14 | /* use !important to prevent issues with browser extensions that change fonts */
15 | font-family: "icomoon" !important;
16 | speak: none;
17 | font-style: normal;
18 | font-weight: normal;
19 | font-variant: normal;
20 | text-transform: none;
21 | line-height: 1;
22 |
23 | /* Better Font Rendering =========== */
24 | -webkit-font-smoothing: antialiased;
25 | -moz-osx-font-smoothing: grayscale;
26 | }
27 |
28 | .icon-wechat:before {
29 | content: "\e900";
30 | color: #7bb32e;
31 | }
32 | .icon-github:before {
33 | content: "\e902";
34 | }
35 | .icon-envelop:before {
36 | content: "\e945";
37 | }
38 |
--------------------------------------------------------------------------------
/demo18-devServer/src/assets/fonts/icomoon.css:
--------------------------------------------------------------------------------
1 | @font-face {
2 | font-family: "icomoon";
3 | src: url("./icomoon.eot?nn7hff");
4 | src: url("./icomoon.eot?nn7hff#iefix") format("embedded-opentype"),
5 | url("./icomoon.ttf?nn7hff") format("truetype"),
6 | url("./icomoon.woff?nn7hff") format("woff"),
7 | url("./icomoon.svg?nn7hff#icomoon") format("svg");
8 | font-weight: normal;
9 | font-style: normal;
10 | }
11 |
12 | [class^="icon-"],
13 | [class*=" icon-"] {
14 | /* use !important to prevent issues with browser extensions that change fonts */
15 | font-family: "icomoon" !important;
16 | speak: none;
17 | font-style: normal;
18 | font-weight: normal;
19 | font-variant: normal;
20 | text-transform: none;
21 | line-height: 1;
22 |
23 | /* Better Font Rendering =========== */
24 | -webkit-font-smoothing: antialiased;
25 | -moz-osx-font-smoothing: grayscale;
26 | }
27 |
28 | .icon-wechat:before {
29 | content: "\e900";
30 | color: #7bb32e;
31 | }
32 | .icon-github:before {
33 | content: "\e902";
34 | }
35 | .icon-envelop:before {
36 | content: "\e945";
37 | }
38 |
--------------------------------------------------------------------------------
/demo19-dev-prod/src/assets/fonts/icomoon.css:
--------------------------------------------------------------------------------
1 | @font-face {
2 | font-family: "icomoon";
3 | src: url("./icomoon.eot?nn7hff");
4 | src: url("./icomoon.eot?nn7hff#iefix") format("embedded-opentype"),
5 | url("./icomoon.ttf?nn7hff") format("truetype"),
6 | url("./icomoon.woff?nn7hff") format("woff"),
7 | url("./icomoon.svg?nn7hff#icomoon") format("svg");
8 | font-weight: normal;
9 | font-style: normal;
10 | }
11 |
12 | [class^="icon-"],
13 | [class*=" icon-"] {
14 | /* use !important to prevent issues with browser extensions that change fonts */
15 | font-family: "icomoon" !important;
16 | speak: none;
17 | font-style: normal;
18 | font-weight: normal;
19 | font-variant: normal;
20 | text-transform: none;
21 | line-height: 1;
22 |
23 | /* Better Font Rendering =========== */
24 | -webkit-font-smoothing: antialiased;
25 | -moz-osx-font-smoothing: grayscale;
26 | }
27 |
28 | .icon-wechat:before {
29 | content: "\e900";
30 | color: #7bb32e;
31 | }
32 | .icon-github:before {
33 | content: "\e902";
34 | }
35 | .icon-envelop:before {
36 | content: "\e945";
37 | }
38 |
--------------------------------------------------------------------------------
/demo11-css/webpack.config.js:
--------------------------------------------------------------------------------
1 | const path = require("path");
2 |
3 | module.exports = {
4 | entry: {
5 | app: "./src/app.js"
6 | },
7 | output: {
8 | publicPath: __dirname + "/dist/", // 打包后资源文件的引用会基于此路径
9 | path: path.resolve(__dirname, "dist"), // 打包后的输出目录
10 | filename: "[name].bundle.js"
11 | },
12 | module: {
13 | rules: [
14 | {
15 | test: /\.css$/,
16 | // 以