详解webpack+ES6+Sass搭建多页面应用

下面是详解Webpack+ES6+Sass搭建多页面应用的完整攻略。

目录结构

我们会使用一个简单的目录结构来组织整个应用程序。

├── README.md
├── package.json
├── webpack.config.js
├── webpack.common.js
├── webpack.dev.js
├── webpack.prod.js
├── src
│   ├── pages
│   │   ├── page1
│   │   │   ├── index.html
│   │   │   ├── index.js
│   │   │   ├── index.scss
│   │   ├── page2
│   │   │   ├── index.html
│   │   │   ├── index.js
│   │   │   ├── index.scss
│   ├── css
│   │   ├── reset.scss
│   ├── js
│   │   ├── common.js
├── dist
│   ├── page1.html
│   ├── page2.html
│   ├── assets
│   │   ├── css
│   │   │   ├── main.css
│   │   ├── js
│   │   │   ├── main.js
│   │   ├── images
│   │   │   ├── image1.jpg
│   │   │   ├── image2.png

准备工作

在开始使用Webpack构建多页面应用之前,需要确保已经正确安装了Node.js和npm。

然后,在项目的根目录下,运行以下命令,初始化npm项目:

npm init -y

接着,安装Webpack及其依赖:

npm i webpack webpack-cli webpack-dev-server html-webpack-plugin clean-webpack-plugin --save-dev

配置文件

Webpack的配置文件一般分为三个:

  • webpack.common.js是通用配置文件,适用于开发环境和生产环境;
  • webpack.dev.js是开发环境下的配置文件;
  • webpack.prod.js是生产环境下的配置文件。

首先,我们来编写通用配置文件webpack.common.js,内容如下:

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

module.exports = {
  entry: './src/js/common.js', // 公共脚本
  output: {
    filename: 'js/[name].[hash].js',
    path: path.resolve(__dirname, 'dist'),
  },
  plugins: [
    new CleanWebpackPlugin(),
    new HtmlWebpackPlugin({
      filename: 'page1.html', // 生成的html文件名称
      template: './src/pages/page1/index.html', // 模板文件路径
      chunks: ['page1'], // 选择需要加入html中的js
    }),
    new HtmlWebpackPlugin({
      filename: 'page2.html', // 生成的html文件名称
      template: './src/pages/page2/index.html', // 模板文件路径
      chunks: ['page2'], // 选择需要加入html中的js
    }),
  ],
  module: {
    rules: [
      {
        test: /\.js$/,
        use: ['babel-loader'],
        exclude: /node_modules/,
      },
      {
        test: /\.scss$/,
        use: [
          'style-loader', // 将处理后的CSS代码内联到页面中,使其及时生效
          {
            loader: 'css-loader',
            options: {
              importLoaders: 2, // 设置在内嵌样式中引入其他样式文件时,要引用多少个loader
              modules: false, // 是否启用css modules
            },
          },
          'sass-loader', // 将SCSS代码转换为CSS代码
          {
            loader: 'postcss-loader', // 使用postcss-loader添加CSS3前缀
            options: {
              plugins: [require('autoprefixer')],
            },
          },
        ],
      },
      {
        test: /\.(png|jpe?g|gif)$/i,
        use: [
          {
            loader: 'file-loader',
            options: {
              outputPath: 'assets/images', // 图片文件输出路径
            },
          },
        ],
      },
    ],
  },
}

然后,编写开发环境下的配置文件webpack.dev.js,内容如下:

const commonConfig = require('./webpack.common')
const webpack = require('webpack')
const { merge } = require('webpack-merge')

module.exports = merge(commonConfig, {
  mode: 'development',
  devtool: 'cheap-module-eval-source-map',
  devServer: {
    contentBase: './dist',
    open: true,
    port: 8080, // 端口号
    hot: true, // 热更新
  },
  plugins: [new webpack.HotModuleReplacementPlugin()],
})

最后,编写生产环境下的配置文件webpack.prod.js,内容如下:

const commonConfig = require('./webpack.common')
const { merge } = require('webpack-merge')

module.exports = merge(commonConfig, {
  mode: 'production',
})

具体应用

接下来,我们使用一个简单的示例来演示Webpack如何构建多页面应用。

示例一

假设我们有一个页面page1,页面结构如下:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <title>Page 1</title>
    <link rel="stylesheet" href="../../css/reset.scss" />
    <link rel="stylesheet" href="./index.scss" />
  </head>
  <body>
    <h1>Page 1</h1>
    <img src="../../assets/images/image1.jpg" alt="" />
    <script src="index.js"></script>
  </body>
</html>

src/pages/page1目录中,我们还需要编写相应的JavaScript和Sass代码。

首先,编写JavaScript代码,在src/pages/page1/index.js中输入以下代码:

import '../css/reset.scss'
import './index.scss'

console.log('Page 1')

接着,编写Sass代码,在src/pages/page1/index.scss中输入以下代码:

@import '../../css/reset.scss';

h1 {
  color: red;
}

运行npm run dev命令,在浏览器中打开http://localhost:8080/page1.html,您应该能看到以下结果:

Page 1

同时,页面的样式应该也已经生效了。

示例二

接下来,我们再来演示一个多页面应用的另一个页面page2,页面结构如下:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <title>Page 2</title>
    <link rel="stylesheet" href="../../css/reset.scss" />
    <link rel="stylesheet" href="./index.scss" />
  </head>
  <body>
    <h1>Page 2</h1>
    <img src="../../assets/images/image2.png" alt="" />
    <script src="index.js"></script>
  </body>
</html>

src/pages/page2目录中,我们也需要编写相应的JavaScript和Sass代码。

同上,首先编写JavaScript代码,在src/pages/page2/index.js中输入以下代码:

import '../css/reset.scss'
import './index.scss'

console.log('Page 2')

然后编写Sass代码,在src/pages/page2/index.scss中输入以下代码:

@import '../../css/reset.scss';

h1 {
  color: blue;
}

运行npm run dev命令,在浏览器中打开http://localhost:8080/page2.html,您应该能看到以下结果:

Page 2

同时,页面的样式应该也已经生效了。

构建项目

当我们开发完应用程序后,需要将其构建为生产环境的代码。

在终端中运行以下命令:

npm run build

构建完成后,所有的HTML、CSS、JavaScript文件都会生成到dist目录下。

最后,我们可以在dist目录下运行一个静态服务器或者将dist目录中的文件放到Web服务器中进行部署。

以上就是完整的Webpack+ES6+Sass搭建多页面应用的攻略。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解webpack+ES6+Sass搭建多页面应用 - Python技术站

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

相关文章

  • jQuery使用ajax传递json对象到服务端及contentType的用法示例

    下面就来详细讲解一下jQuery使用ajax传递JSON对象到服务端及contentType的用法示例。 相关概念 在明确jQuery使用ajax传递JSON对象到服务端及contentType的用法示例前,我们需要先了解一些相关概念: AJAX: Asynchronous JavaScript and XML(异步的 JavaScript 和 XML),是…

    jquery 2023年5月28日
    00
  • NodeJS实现同步的方法

    下面是“NodeJS实现同步的方法”的完整攻略: 什么是NodeJS同步 在NodeJS中,异步调用是常态,它的基础是事件循环(Event Loop)机制。在应用中有很多场景,需要同步输出多个异步调用返回的结果,这时候就需要手动实现同步。 NodeJS实现同步的方法 使用ES6中的async/await async/await是ES6中新增的异步编程方法,使…

    jquery 2023年5月27日
    00
  • jQuery UI Sortable start事件

    jQuery UI 的 Sortable 组件提供了一个 start 事件,该事件在 Sortable 实例中的项目开始移动时触发。在本教程中,我们将详细介绍 Sortable 的 start 事件的使用方法。 start 事件基本语法如下: $( ".selector" ).sortable({ start: function( eve…

    jquery 2023年5月11日
    00
  • javascript 匿名函数的理解(透彻版)

    Javascript 匿名函数的理解 在 JavaScript 中,函数是一个非常重要的概念,而匿名函数是其中一个常用的形式。本文主要讲解 JavaScript 中匿名函数的原理、使用方法及相关注意事项。 什么是匿名函数 匿名函数又称为无名函数,是 JavaScript 中定义一个函数的一种方式。通常情况下,我们定义函数时都会给函数取名字,在调用函数时可以通…

    jquery 2023年5月18日
    00
  • jQWidgets jqxWindow title属性

    jqxWindow是jQWidgets中的一个组件,用于显示一个可拖拽的窗口。title属性是用于设置窗口标题的属性。 语法格式 设置窗口的方式可以通过以下两种方式: HTML方式 通过在HTML标签中添加属性来创建窗口,如下: <div id="window"> <div>窗口内容写在这里</div>…

    jquery 2023年5月12日
    00
  • jQuery 常用特效实例小结【显示与隐藏、淡入淡出、滑动、动画等】

    jQuery 常用特效实例小结【显示与隐藏、淡入淡出、滑动、动画等】 一、显示与隐藏 1. 显示元素 使用 show() 方法可以将元素显示出来,让元素从隐藏状态转变为显示状态。例如: $("#myDiv").show(); // 将 ID 为 myDiv 的元素显示出来 2. 隐藏元素 使用 hide() 方法可以将元素隐藏起来,让元素…

    jquery 2023年5月28日
    00
  • jQuery autocomplate 自扩展插件、自动完成示例代码

    jQuery Autocomplete是一个非常实用的jQuery插件,它可以帮助我们在输入框中实现自动补全和提醒功能。同时,它还支持自定义扩展,因此可以按照需要进行灵活调整。 自定义扩展 Autocomplete提供了许多可自定义的扩展功能。下面是其中几项: source 这个属性定义了来自哪个URL或数组中获取数据,jQuery Autocomplete…

    jquery 2023年5月18日
    00
  • jQWidgets jqxTreeGrid rowEndEdit事件

    以下是关于 jQWidgets jqxTreeGrid 组件中 rowEndEdit 事件的详细攻略。 jQWidgets jqxTreeGrid rowEndEdit 事件 jQWidgets jqxTreeGrid 组件的 rowEndEdit 事件在用户完成编辑行并将其保存时触发。通过设置 rowEndEdit 事件处理程序,可以在用户完成编辑时执行自…

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