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

下面是如何用Webpack4.0撸单页/多页脚手架的完整攻略:

准备工作

在开始之前,我们需要安装 Node.js 和 npm,以及全局安装 webpack 和 webpack-cli。

npm install webpack webpack-cli -g

初始化项目

我们创建一个名为webpack-project的项目文件夹,并在其中初始化项目:

mkdir webpack-project
cd webpack-project
npm init -y

安装依赖

现在我们需要安装一些必须的依赖包:

npm i webpack webpack-cli webpack-dev-server clean-webpack-plugin html-webpack-plugin mini-css-extract-plugin css-loader style-loader sass-loader node-sass file-loader url-loader babel-loader @babel/core @babel/preset-env --save-dev

创建Webpack配置文件

我们需要创建 webpack 的配置文件来指导它如何构建我们的项目。 我们会创建两个不同的配置文件 webpack.config.jswebpack.prod.config.js

单页应用配置

对于单页应用程序,我们只需要创建一个入口文件和一个 HTML 文件。 我们的配置文件应该包括以下部分:

const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');

module.exports = {
  entry: './src/index.js',
  output: {
    path: path.resolve(__dirname, 'dist'),
    filename: 'main.js'
  },
  plugins: [
    new HtmlWebpackPlugin({
      title: 'webpack-project',
      template: path.join(__dirname, '/public/index.html'), // 定义 HTML 模板路径
    }),
  ],
  module: {
    rules: [
      {
        test: /\.(js|jsx)$/,
        exclude: /node_modules/,
        use: ["babel-loader"],
      },
      {
        test: /\.(sa|sc|c)ss$/,
        use: [
          'style-loader',
          'css-loader',
          'sass-loader',
        ],
      },
      {
        test: /\.(png|jpe?g|gif)$/i,
        loader: 'file-loader',
        options: {
          outputPath: 'images',
        },
      },
    ]
  },
  devServer: {
    contentBase: './dist',
    port: 3000,
    hot: true,
    open: true,
  },
};

多页应用配置

对于多页应用程序,我们需要将每个页面的入口文件都添加到配置文件中。 我们的配置文件应该包括以下部分:

const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const { CleanWebpackPlugin } = require('clean-webpack-plugin');

module.exports = {
  entry: {
    index: './src/index.js',
    about: './src/about.js',
    contact: './src/contact.js'
  },
  output: {
    path: path.resolve(__dirname, './dist'),
    filename: '[name].[hash].js',
  },
  plugins: [
    new HtmlWebpackPlugin({
      title: '首页', // 定义 HTML 标题
      filename: 'index.html', // 定义 HTML 文件名称
      template: path.join(__dirname, '/public/index.html'), // 定义 HTML 模板路径
      chunks: ['index']
    }),
    new HtmlWebpackPlugin({
      title: '关于我们',
      filename: 'about.html',
      template: path.join(__dirname, '/public/about.html'),
      chunks: ['about']
    }),
    new HtmlWebpackPlugin({
      title: '联系我们',
      filename: 'contact.html',
      template: path.join(__dirname, '/public/contact.html'),
      chunks: ['contact']
    }),
    new CleanWebpackPlugin(),
  ],
  module: {
    rules: [
      {
        test: /\.(js|jsx)$/,
        exclude: /node_modules/,
        use: ["babel-loader"],
      },
      {
        test: /\.(sa|sc|c)ss$/,
        use: [
          'style-loader',
          'css-loader',
          'sass-loader',
        ],
      },
      {
        test: /\.(png|jpe?g|gif)$/i,
        loader: 'file-loader',
        options: {
          outputPath: 'images',
        },
      },
    ]
  },
  devServer: {
    contentBase: './dist',
    port: 3000,
    hot: true,
    open: true,
  },
  optimization: {
    splitChunks: {
      chunks: "all",
    }
  }
};

编写命令

现在,我们需要在 package.json 文件中添加一些命令,这些命令将使我们更容易地运行和构建应用程序。

{
  "name": "webpack-project",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "start": "webpack-dev-server --config webpack.config.js",
    "build": "webpack --config webpack.prod.config.js"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "@babel/core": "^7.16.12",
    "@babel/preset-env": "^7.16.11",
    "babel-loader": "^8.2.3",
    "clean-webpack-plugin": "^4.0.0",
    "css-loader": "^6.5.1",
    "file-loader": "^6.2.0",
    "html-webpack-plugin": "^5.5.0",
    "mini-css-extract-plugin": "^2.4.5",
    "node-sass": "^6.0.1",
    "sass-loader": "^12.1.0",
    "style-loader": "^3.3.0",
    "url-loader": "^4.1.2",
    "webpack": "^5.64.4",
    "webpack-cli": "^4.9.1",
    "webpack-dev-server": "^4.6.0"
  },
  "dependencies": {}
}

现在,可以使用以下命令运行开发服务器:

npm run start

使用以下命令生成生产构建:

npm run build

示例

下面是两个示例:

示例1:基于React的单页应用

创建基于 React 的单页应用项目:

npx create-react-app react-app

进入项目的根目录,然后安装依赖:

cd react-app
npm install --save-dev webpack webpack-cli webpack-dev-server react-hot-loader @babel/core @babel/preset-env @babel/preset-react babel-loader style-loader css-loader sass-loader node-sass html-webpack-plugin file-loader url-loader

然后,我们需要修改 package.json 文件,以便使用我们自己的 Webpack 配置文件。在 scripts 部分添加以下内容:

"scripts": {
    "start": "webpack-dev-server --config webpack.dev.js --open",
    "build": "webpack --config webpack.prod.js"
  }

使用以下命令来创建我们的 Webpack 配置文件:

touch webpack.common.js webpack.dev.js webpack.prod.js

具体配置请参考上面的单页应用配置示例。

示例 2:基于Vue的多页应用

在 Vue CLI 中默认使用单页应用程序,但是我们可以进行一些修改以更改基于 Vue 的应用程序为多页应用程序。我们需要在 Vue CLI 中使用自定义 Webpack 配置。我们将使用 vue-cli-plugin-multi-page 插件来配置多页应用程序。

首先安装 vue-cli-plugin-multi-page 插件:

npm install vue-cli-plugin-multi-page

使用以下命令创建一个基于 Vue.js 的多页应用:

vue create my-multi-page-app

然后进行一些配置:

  1. 选择 Manually select features
  2. 选择 Babel, Router, Vuex, CSS Pre-processors, Linter / Formatter
  3. Use history mode for router? 选择 Yes
  4. Pick a CSS pre-processor 选择 Sass/SCSS (with dart-sass)

接下来添加 vue.config.js 文件:

const pages = {
  index: {
    entry: 'src/main.js',
    template: 'public/index.html',
    filename: 'index.html',
    title: '首页',
  },
  about: {
    entry: 'src/about.js',
    template: 'public/about.html',
    filename: 'about.html',
    title: '关于我们',
  },
  contact: {
    entry: 'src/contact.js',
    template: 'public/contact.html',
    filename: 'contact.html',
    title: '联系我们',
  }
}

module.exports = {
  publicPath: process.env.NODE_ENV === 'production' ? '/production-sub-path/' : '/',
  pages,
  chainWebpack: (config) => {
    config.plugin('html')
      .tap((args) => {
        Object.keys(pages).forEach((key) => {
          args[0].title = pages[key].title; // 页面的标题
          args[0].chunks = ['chunk-vendors', 'chunk-common', key]; // 当前页面所需的 JS和CSS文件名
        });
        return args;
      });
  },
};

这里我们定义了三个页面:首页、关于我们和联系我们。

然后我们删除 src/router.js 文件,把多页应用中每个页面的路由都独立出来。新建文件 src/pages/index/router.jssrc/pages/about/router.jssrc/pages/contact/router.js

具体配置请参考上面的多页应用配置示例。

以上就是基于webpack4.0撸单页/多页脚手架的完整攻略,还有很多其它相关的配置和插件可以调整,感谢你的阅读。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:如何用webpack4.0撸单页/多页脚手架 (jquery, react, vue, typescript) - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • JS组件系列之MVVM组件构建自己的Vue组件

    让我来详细讲解“JS组件系列之MVVM组件构建自己的Vue组件”的完整攻略。 MVVM组件的基础概念 首先,我们需要了解MVVM组件的基础概念。MVVM组件是一种基于Vue.js框架的组件化开发方式,它采用了“Model-View-ViewModel”的设计模式,将UI界面与数据逻辑分离。其中,Model表示数据模型,View表示UI界面,ViewModel…

    jquery 2023年5月27日
    00
  • jQWidgets jqxTreeGrid showToolbar属性

    以下是关于 jQWidgets jqxTreeGrid 组件中 showToolbar 属性的详细攻略。 jQWidgets jqxTreeGrid showToolbar 属性 jQWidgets jqxTreeGrid 的 showToolbar 属性用于控制是否显示工具栏。工具栏是一个位于组件顶部的区域,用于显示操作按钮、搜索框等。 语法 $(‘#tr…

    jquery 2023年5月12日
    00
  • jQWidgets jqxListBox indeterminateIndex()方法

    jQWidgets jqxListBox indeterminateIndex()方法详解 jQWidgets是一个基于jQuery的UI组件库,提供了丰富UI组件工具包。jqxListBox是其中之一。本文将详细介绍jqxListBox的indeterminateIndex()方法,包括定义、语法和示例。 indeterminateIndex()方法的定义…

    jquery 2023年5月10日
    00
  • jQWidgets jqxFileUpload multipleFilesUpload属性

    jQWidgets jqxFileUpload multipleFilesUpload属性 jQWidgets是一个基于jQuery的UI组件库,提供了丰富的UI组件和工具包括表格、日历、下拉菜单等。jqxFileUpload是jQWidgets中的一个组件,用于实现文件上传功能。multipleFilesUpload属性是jqxFileUpload中的一个…

    jquery 2023年5月9日
    00
  • jQuery实现表格的增、删、改操作示例

    jQuery实现表格的增、删、改操作示例 前言 jQuery是一个非常流行的JavaScript库,它可以轻松地实现网页中的各种交互效果,其中包括表格的增、删、改等操作。 在本文中,我们将介绍如何使用jQuery来实现一个简单的表格增、删、改的功能,并提供两个示例说明。 准备工作 首先,我们需要在HTML页面中添加一个用于显示表格的div元素,并在其内部添加…

    jquery 2023年5月28日
    00
  • jQWidgets jqxDateTimeInput主题属性

    以下是关于“jQWidgets jqxDateTimeInput主题属性”的完整攻略,包含两个示例说明: 属性简介 theme 属性是 jQWidgets jqxDateTimeInput 控件的一个属性,用于设置日期时间输入框的主题。该属性的语法如下: $("#jqxDateTimeInput").jqxDateTimeInput({ …

    jquery 2023年5月10日
    00
  • jQuery UI Datepicker按钮文本选项

    以下是关于 jQuery UI Datepicker 按钮文本选项的详细攻略: jQuery UI Datepicker 按钮文本选项 按钮文本选项许您自定义日期选择器中的按钮文本。您可以指定每个按钮的文本,包括今天、清除和关闭按钮。 语法 $(selectordatepicker({ buttonText: { today: "今天",…

    jquery 2023年5月11日
    00
  • jQuery UI进度条禁用选项

    jQuery UI进度条禁用选项攻略 jQuery UI进度条是一个强大的JavaScript库,它提供了许多选项和功能,以便创建自定义的进度条。其中,禁用选项用于禁用进度条。以下是详细攻略,含两个示例,演示如何使用禁用选项: 步骤1:引入库 在使用之前,需要先在HTML中引入jQuery库和jQuery UI库。可以通过以下方式引入: <link r…

    jquery 2023年5月9日
    00
合作推广
合作推广
分享本页
返回顶部