1. 创建并进入空文件夹,初始化package
npm init
2. 创建项目其他文件
以下是完整的项目目录:
- 根目录
- src
- core
- a.js
- b.js
- c.js
- d.js
- index.js
- core
- index.html
- webpack.config.js
- package.json
- src
index.js 项目入口文件
import * as a from './a'
a.js
import * as b from './b'import * as d from './d'console.log('file: a.js')
b.js
import * as c from './c'console.log('file: b.js')
c.js
console.log('file: c.js')
d.js
console.log('file: d.js')
index.html
<!DOCTYPE html><html><head><meta charset="utf-8" /><meta http-equiv="X-UA-Compatible" content="IE=edge"><title>webapck</title><meta name="viewport" content="width=device-width, initial-scale=1"><script src="./dist/index.js"></script></head><body></body></html>
3. 安装webpack
修改package.json,如下。执行 npm i 安装webpack
package.json
{"name": "webpack","version": "1.0.0","description": "","main": "index.js","scripts": {"test": "echo \"Error: no test specified\" && exit 1","dev": "webpack --config webpack.config.js"},"author": "","license": "ISC","devDependencies": {"webpack": "^4.39.3","webpack-cli": "^3.3.7"}}
4. 配置webpack.config.js
webpack.config.js
const path = require('path');module.exports = {entry: './src/index.js',output: {filename: 'index.js',path: path.resolve(__dirname, 'dist')}}
5. 编译打包
执行 npm run dev
执行完后,会在根目录创建一个 dist 的文件夹,里面含有一个最终打包好的js文件,在html里直接引用这个js即可。
6. 思考题
core文件夹下每个js都有个console,它们打印的顺序是?
7. 打印结果
8. 结论
js引用关系图
webpack会从 webpack.config.js 配置entry的入口js文件开始读起,从上到下按顺序执行。webpack读取js会先看有没有import 。
如果有import,则按import的顺序依次读取导入的js。
如果没有import,则继续执行当前js代码。
执行完当前js代码,会回退到上个js继续执行,直到回退到入口文件index.js
如果已经import过的js,则不再重复导入
该项目具体执行顺序
- 首先读取index.js,发现有import a.js
- 进入a.js ,发现有import ,导入第一个文件 b.js
- 进入b.js,发现有import,进入 c.js
- 在c.js里没有import,则执行c.js里面的代码,此时打印 console.log(‘file: c.js’)
- 执行完c.js后,回退到上个js,即b.js
- 执行b.js代码,此时打印 console.log(‘file: b.js’)
- 执行完b.js,回退到上个js,即a.js
- 在a.js,导入第二个文件 d.js
- 进入d.js,没有导入的js,则执行当前js代码,此时打印 console.log(‘file: d.js’)
- 执行完d.js,回退到a.js,继续执行a.js代码,此时打印 console.log(‘file: a.js’)
- 执行完a.js,回退到index.js,结束!
9. 代码
10. 如果是ts,该怎么配置
安装 typescript 和 ts-loader
_
修改 package.json,并执行 npm i 重新安装
{"name": "webpack","version": "1.0.0","description": "","main": "index.js","scripts": {"test": "echo \"Error: no test specified\" && exit 1","dev": "webpack --config webpack.config.js"},"author": "","license": "ISC","devDependencies": {"ts-loader": "^6.0.4","typescript": "^3.6.2","webpack": "^4.39.3","webpack-cli": "^3.3.7"}}
修改webpack.config.js
const path = require('path');module.exports = {entry: './src/index.ts',output: {filename: 'index.js',path: path.resolve(__dirname, 'dist')},module:{rules: [{test: /\.tsx?$/,use: 'ts-loader'}]},resolve: {extensions:['.ts','.js']}}
把js文件后缀都改为ts,然后执行 npm run dev 编译打包
