如何用webpack4.0撸单页/多页脚手架 (jquery, react,

如何用webpack4.0撸单页/多页脚手架 (jquery, react,

1.导语

首先来简单介绍一下webpack:现代 JavaScript 应用程序的 静态模块打包工具 。当 webpack 处理应用程序时,它会在内部构建一个会映射项目所需的每个模块 的依赖图(dependency graph),并生成一个或多个 bundle 。webpack4.0出现之后,我们可以不用再引入一个配置文件来打包项目,并且它仍然有着很高的可配置性,可以很好满足我们的需求。 在开始正文之前,首先先来看看我们要实现的成果:

支持ES6+JQuery+Less/Scss的单页/多页脚手架

支持ES6+React+Less/Scss+Typescript的单页/多页脚手架

支持ES6+Vue+Less/Scss+Typescript的单页/多页脚手架

github地址:

基于webpack4.0搭建的脚手架(支持react/vue/typescript/es6+/jquery+less/scss)

在脚手架的开发过程中我会详细介绍每个插件或者loader的用途以及webpack的核心理念,如有不懂或者有其他更好的想法欢迎交流。 下面是基于该文章的webpack4.0的思维导图:

如何用webpack4.0撸单页/多页脚手架 (jquery, react,

2.webpack核心概念

入口:指示 webpack 应该使用哪个模块作为入口起点

输出:告诉 webpack 在哪里输出它所创建的 bundle,以及如何命名这些文件

loader:让 webpack 能够去处理其他类型的文件,并将它们转换为有效模块,以供应用程序使用

插件:用于执行范围更广的任务。包括:打包优化,资源管理,注入环境变量

模式:通过选择 development, production 或 none 之中的一个,来设置 mode 参数,从而进行不同的打包优化

浏览器兼容性:支持所有符合ES5 标准的浏览器(不支持 IE8 及以下版本)下面提供官网的打包模型

如何用webpack4.0撸单页/多页脚手架 (jquery, react,

3.支持ES6+JQuery+Less/Scss的单页/多页脚手架

在实现脚手架之前,假设我们已经创建了目录和package.json文件,接下来先安装webpack相关依赖:

// 此处建议安装局部依赖,安装全局依赖可能会出现版本问题 npm install -D webpack webpack-cli

因为项目要支持es6+,我们还需要安装babel相关依赖:

npm install -D babel-loader @babel/core @babel/preset-env

这个时候可以开始配置我们的脚手架逻辑了,为了项目结构清晰易于维护,我们建一个build目录专门放webpack构建的脚本,webpack默认的配置文件是webpack.config.js,由于实际项目需要,我们将其拆分为3个文件,分别是webpack通用配置文件webpack.base.js,开发环境配置文件webpack.dev.js以及生产环境配置文件webpack.prod.js。

如何用webpack4.0撸单页/多页脚手架 (jquery, react,

我们先处理webpack.common.js文件

const path = require('path'); const webpack = require('webpack'); module.exports = { entry: { main: './src/index.js', }, output: { path: path.resolve(__dirname, '../dist'), }, module: { rules: [ // 将es6编译成es5 { test: /\.jsx?$/, // ?表示x有0个或一个 exclude: /node_modules/, // 不编译某个目录下的文件 include: path.resolve(__dirname, '../src'), // 只在include包含的目录下进行loader编译 use: [ "babel-loader", ] }, ] } }

为了项目后期的开发和维护,我们建立好项目结构:

如何用webpack4.0撸单页/多页脚手架 (jquery, react,

public目录是事先准备好的html模版,这里就不介绍了,其他目录可根据具体项目进行设置。

我们还需要一个插件将打包后的文件植入到html模版中并导出到dist目录下,这里使用html-webpack-plugin来实现

npm install -D html-webpack-plugin

现在webpack.base.js为如下:

const path = require('path'); const HtmlWebpackPlugin = require('html-webpack-plugin'); const template = path.resolve(__dirname, '../public/index.html'); module.exports = { entry: { main: './src/index.js' }, output: { path: path.resolve(__dirname, '../dist') }, module: { rules: [ // 将es6编译成es5 { test: /\.jsx?$/, // ?表示x有0个或一个 exclude: /node_modules/, // 不编译某个目录下的文件 include: path.resolve(__dirname, '../src'), // 只在include包含的目录下进行loader编译 use: [ "babel-loader", ] }, ] }, plugins: [ new HtmlWebpackPlugin({ template, filename: 'index.html' }) ] }

为了打包项目,我们需要在webpack.prod.js目录下进行配置,此处需要一个模块webpack-merge将wepack基础配置合并进生产配置,我们先来安装一下:

npm install -D webpack-merge

webpack.prod.js配置如下:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/aedbf55d02c511c861c02c974d1b9f4b.html