一边啃JS和计网的书,一边来学webpack,学习完后就可以学习框架了,实战搞起来,理论补起来
在执行以下指令以前,先设置powershell:解决webpack : 无法加载文件 C:\Users\XXX\AppData\Roaming\npm\webpack.ps1因为在此系统上禁止运行脚本
备注:老师执行完开发环境指令后,在build目录下生成了built.js文件,而我执行完指令后,在build目录下生成了built.js目录,在该目录下有main.js文件,我猜测是配置方面的问题,因此我使用的指令是webpack src/index.js -o ./build --mode=development
index.js:
function add(x,y){
return x+y;
}
console.log(add(1,2));
main.js(development):
/*
* ATTENTION: The "eval" devtool has been used (maybe by default in mode: "development").
* This devtool is neither made for production nor for readable output files.
* It uses "eval()" calls to create a separate source file in the browser devtools.
* If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)
* or disable the default devtool with "devtool: false".
* If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/).
*/
/******/ (() => {
// webpackBootstrap
/******/ var __webpack_modules__ = ({
/***/ "./src/index.js":
/*!**********************!*\
!*** ./src/index.js ***!
\**********************/
/***/ (() => {
eval("function add(x,y){\r\n return x+y;\r\n}\r\nconsole.log(add(1,2));\n\n//# sourceURL=webpack://webpack_test/./src/index.js?");
/***/ })
/******/ });
/************************************************************************/
/******/
/******/ // startup
/******/ // Load entry module and return exports
/******/ // This entry module can't be inlined because the eval devtool is used.
/******/ var __webpack_exports__ = {
};
/******/ __webpack_modules__["./src/index.js"]();
/******/
/******/ })()
;
main.js(production):
console.log(3);
//这里和老师的也不一样
无论是开发环境产生的main.js,还是生产环境产生的main.js,都可以运行(node或浏览器内):
data.json:
{
"name": "jack",
"age": 18
}
修改index.js,再打包生成main.js文件:
import data from './data.json';
console.log(data);
function add(x,y){
return x+y;
}
console.log(add(1,2));
注意,所有loader都需要用npm下载
所有构建工具都是基于nodejs平台运行的,模块化默认采用commonjs。
(模块化分为ES6模块和commonjs)
配置文件:
// resolve用来拼接绝对路径的方法(不懂照做,以后深入学node)
const {
resolve } = require('path');
module.exports = {
// webpack配置
// 入口起点
entry: './src/index.js',
// 输出
output: {
// 输出文件名
filename: 'built.js',
// 输出路径
// __dirname nodejs的变量,代表当前文件的目录绝对路径(不懂照做)
path: resolve(__dirname, 'build')
},
// loader的配置
module: {
rules: [
// 详细loader配置
// 不同文件必须配置不同loader处理
{
// 匹配哪些文件(正则表达式)
test: /\.css$/,
// 使用哪些loader进行处理
use: [
// use数组中loader执行顺序:从右到左,从下到上 依次执行(很重要)
// 创建style标签,将js中的样式资源插入进行,添加到head中生效
'style-loader',
// 将css文件变成commonjs模块加载js中,里面内容是样式字符串
'css-loader'
]
},
{
test: /\.less$/,
use: [
'style-loader',
'css-loader',
// 将less文件编译成css文件
// 需要下载 less-loader和less
'less-loader'
]
}
]
},
// plugins的配置
plugins: [
// 详细plugins的配置
],
// 模式
mode: 'development', // 开发模式
// mode: 'production'
}
此处以css为主,就不写less文件了
index.js:
// 引入样式资源
import './index.css';
import './index.less';
index.css:
html, body{
margin: 0;
padding: 0;
height: 100%;
background-color: pink;
}
想要查看效果,只需把built.js文件引入html即可
重点是配置plugins,记得下载和引用plugins
下载:npm i html-webpack-plugin -D
config:
/*
loader: 1. 下载 2. 使用(配置loader)
plugins: 1. 下载 2. 引入 3. 使用
*/
const {
resolve } = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
module.exports = {
entry: './src/index.js',
output: {
filename: 'built.js',
path: resolve(__dirname, 'build')
},
module: {
rules: [
// loader的配置
]
},
plugins: [
// plugins的配置
// html-webpack-plugin
// 功能:默认会创建一个空的HTML,自动引入打包输出的所有资源(JS/CSS)
// 需求:需要有结构的HTML文件
new HtmlWebpackPlugin({
// 复制 './src/index.html' 文件,并自动引入打包输出的所有资源(JS/CSS)
template: './src/index.html'
})
],
mode: 'development'
};
index.js:
function add(x, y) {
return x + y;
}
console.log(add(2, 3));
index.html:(没有引入index.js)
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>webpacktitle>
head>
<body>
<h1 id="title">hello htmlh1>
body>
html>
打包后,在build目录下生成了index.html:
(这里老师直接在终端输入webpack就可以打包了,我也不知道为什么)