文章内容
2022/4/19 17:33:04,作 者: 黄兵
新项目 webpack 打包基本步骤
在使用 Flask 开发的应用,由于 js、css、image 文件分散各处,同时页面加载的时候也需要一个个加载,不利于 SEO,同时会拖慢页面加载速度,所以 webpack 应运而生,使用 webpack 可以将这些文件打包,下面是官方的原理图:
由于官方方方面面都讲了,导致我们很难知道一个新项目我们应该如何使用 webpack,应该怎么设置,我面我根据我的总结,写下了这篇总结性的文章,文章中难免有错误,欢迎大家指正:
1、初始化 npm,之后安装 webpack,接着安装 webpack-cli(用于在命令行中运行 webpack):
npm init -y npm install webpack webpack-cli --save-dev
2、新建一个 src 文件夹,里面是 index.ts 文件:
官方的目录结构:
webpack-demo
|- package.json
|- package-lock.json
+ |- index.html
+ |- /src
+ |- index.js
由于我这里习惯使用 Typescript,所以没有使用 js 文件,这个需要根据大家习惯
之后我们再新建一个 webpack.config.js 文件,这个主要是在 webpack v4 中,可以无须任何配置,然而大多数项目会需要很复杂的设置,这就是为什么 webpack 仍然要支持 配置文件。这比在 terminal(终端) 中手动输入大量命令要高效的多。
最后项目结构变成了如下的样子:
webpack-demo
|- package.json
|- package-lock.json
+ |- webpack.config.js
|- /dist
|- index.html
|- /src
|- index.js
之后是 webpack.config.js 的文件内容,可以根据项目情况修改,同时有些参数不是很了解,可以查看官方文档,官方文档地址我已经放在参考资料哪里:
// Generated using webpack-cli https://github.com/webpack/webpack-cli
const path = require("path");
const HtmlWebpackPlugin = require("html-webpack-plugin");
const MiniCssExtractPlugin = require("mini-css-extract-plugin");
const WorkboxWebpackPlugin = require("workbox-webpack-plugin");
const CssMinimizerPlugin = require("css-minimizer-webpack-plugin");
const TerserPlugin = require("terser-webpack-plugin");
const isProduction = process.env.NODE_ENV === "production";
const stylesHandler = isProduction
? MiniCssExtractPlugin.loader
: "style-loader";
const config = {
entry: {
'page_init': "/src/index.ts",
},
output: {
// 在生成文件之前清空 output 目录
clean: true,
filename: '[name]-[fullhash].bundle.js',
path: path.resolve(__dirname, "./static/dist"),
},
devServer: {
open: true,
host: "localhost",
},
plugins: [
new HtmlWebpackPlugin({
template: "./app/templates/crawler_base.html",
}),
new MiniCssExtractPlugin({
// 类似于 webpackOptions.output 中的选项
// 所有选项都是可选的
filename: '[name]-[fullhash].min.css',
chunkFilename: '[id].min.css',
}),
// Add your plugins here
// Learn more about plugins from https://webpack.js.org/configuration/plugins/
],
module: {
rules: [
{
test: /\.(ts|tsx)$/i,
loader: "ts-loader",
exclude: ["/node_modules/"],
},
{
test: /\.s[ac]ss$/i,
use: [stylesHandler, "css-loader", "postcss-loader", "sass-loader"],
},
{
test: /\.css$/i,
use: [stylesHandler, "css-loader", "postcss-loader"],
},
{
test: /\.(eot|svg|ttf|woff|woff2|png|jpg|gif)$/i,
type: "asset",
},
// Add your rules for custom modules here
// Learn more about loaders from https://webpack.js.org/loaders/
],
},
optimization: {
minimize: true,
minimizer: [
// For webpack@5 you can use the `...` syntax to extend existing minimizers (i.e. `terser-webpack-plugin`), uncomment the next line
// `...`,
new CssMinimizerPlugin(),
new TerserPlugin({
test: /\.js(\?.*)?$/i,
})
],
},
resolve: {
// 用于配置程序可以自行补全哪些文件后缀
extensions: [".tsx", ".ts", ".js", ".css", ".json"],
},
};
module.exports = () => {
if (isProduction) {
config.mode = "production";
config.plugins.push(new MiniCssExtractPlugin());
config.plugins.push(new WorkboxWebpackPlugin.GenerateSW());
} else {
config.mode = "development";
}
return config;
};
之后是 index.ts 文件里面主要是引入需要打包的 js 文件与 css 文件,我的 index.ts 文件示例:
import '../static/css/parse.css'
import '../static/css/json-render-formatter/json-formatter.css'
import '../static/css/styles.css'
这里直接 import 导入需要打包的文件,最后会被打包成一个 .min.css 的压缩🗜文件。
3、修改 package.json 文件:
原来内容:
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
修改后的内容:
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"build": "webpack --mode=production --node-env=production",
"build:dev": "webpack --mode=development",
"build:prod": "webpack --mode=production --node-env=production",
"watch": "webpack --watch",
"serve": "webpack serve"
},
上面主要是我们如果需要打包,直接点击 build:prod 就会自动运行打包了,非常方便。
如下图所示,我再 PyCharm 右边会出现一个 运行的按钮,直接点击运行就可以运行 webpack 绑定工作了。
我们再修改 devDependencies 节内容,增加相关安装包:
原来是:
"devDependencies": {
"html-webpack-plugin": "^5.5.0",
"mini-css-extract-plugin": "^2.6.0",
"webpack": "^5.72.0",
"webpack-cli": "^4.9.2",
"workbox-webpack-plugin": "^6.3.0"
},
修改之后变成如下内容:
"devDependencies": {
"@webpack-cli/generators": "^2.3.0",
"autoprefixer": "^10.3.3",
"critical": "^4.0.1",
"css-loader": "^6.2.0",
"html-webpack-plugin": "^5.3.2",
"mini-css-extract-plugin": "^2.2.2",
"postcss": "^8.3.6",
"postcss-loader": "^6.1.1",
"prettier": "^2.3.2",
"sass": "^1.39.0",
"sass-loader": "^12.1.0",
"style-loader": "^3.2.1",
"terser-webpack-plugin": "^5.2.3",
"ts-loader": "^9.2.5",
"typescript": "^4.4.2",
"webpack": "^5.51.1",
"webpack-cli": "^4.8.0",
"webpack-dev-server": "^4.1.0",
"workbox-webpack-plugin": "^6.2.4"
},
注意上面由于我们使用了 Typescript 所以我们也增加了 typescript 的相关包。
4、新增 tsconfig.json 文件:
在项目根目录下增加tsconfig.json,具体文件内容如下:
{
"compilerOptions": {
"allowSyntheticDefaultImports": true,
"noImplicitAny": true,
"module": "es6",
"target": "es5",
"allowJs": true
},
"files": ["src/index.ts"]
}
这个文件主要是说明 Typescript 编译的时候一些配置。
5、安装相关依赖包:
如果在运行的时候出现如下错误:
Error: Cannot find module 'html-webpack-plugin'
或者其他类似错误,说明没有安装相关的依赖包,我们直接控制台安装依赖包,如下命令:
npm install --save-dev html-webpack-plugin
当我们不知道怎么输入这个包的安装命令,我们可以到 webpack 的中文官方文章,直接输入这个插件的名称,就会出现详细的信息。
之后会出现此插件的详细信息,我们按照文档的方法安装就可以了,截图如下:
6、/static 文件夹下新建 dist 文件夹:
这个文件主要是保存输入的 webpack 打包文件:
以上就是我在使用 webpack 时候的基本步骤,当然这里也有很多问题,例如,导入的 css、js 应该分开,具体没有研究怎么配置,不需要打包的直接注释就可以了,还是有点麻烦。
以后再慢慢解决吧!
参考资料:
黄兵个人博客原创。
转载请注明出处:黄兵个人博客 - 新项目 webpack 打包基本步骤
zabbix-server.service: Can't open PID file Operation not permitted
评论列表