webpack + js如何原生实现二级路由

接手了一个小项目,想着就不用vue了,自己用webpack搭起来了小项目。
刚开始页面量不多我也没做过多考虑,后来页面变多了,明显得有了一级路由和二级路由的需求。
因为平时都用vue,如何实现二级路由实在不清楚。
求教各位前辈如何用js简单得实现二级路由。

const htmlWebpackPlugin = require("html-webpack-plugin")
const extractTextWebpackPlugin = require("extract-text-webpack-plugin")
const path = require('path')

// 自己项目要用到的模板名
const pages = [
    {name: 'index'},
    {name: 'collections'},
    {name: 'projects'},
    {name: 'page4'},
    {name: 'page5'},
    {name: 'page6'},
    {name: 'page7'},
    {name: 'page8'},
    {name: 'page9'},
    {name: 'page10'},
    {name: 'page11'}
]

// 配置webpack入口
const entry = path.join(__dirname, "/src/main.js")

// 配置webpack打包文件位置
const output = {
    path: path.join(__dirname, "/public"),
    filename: "[name].js"
}

// 配置服务器
const devServer = {
    contentBase: path.join(__dirname, "/public"),
    historyApiFallback: true,
    inline: true
}

const _module = {
    rules: [
        {
            test: /\.html$/,
            use: {
                loader: "html-loader"
            }
        },
        {
            test: /(\.jsx|\.js)$/,
            exclude: /node_modules/,
            use: {
                loader: "babel-loader"
            },
        },
        {
            test: /(\.jpg|\.png|\.gif|.jpeg)$/,
            use: [
                {
                    loader: "url-loader",
                    options: {
                        limit: 12000,
                        outputPath: 'images',
                        name: '[name].[hash].[ext]'
                    }
                }
            ]
        },
        {
            test: /\.scss$/,
            use: extractTextWebpackPlugin.extract({
                fallback: 'style-loader',
                use: [
                    {
                        loader: "css-loader"
                    },
                    {
                        loader: "sass-loader"
                    }
                ]
            })
        },
        {
            test: /\.(otf)|(woff)|(eot)|(ttf)$/,
            use: [
                {
                    loader: "url-loader",
                    options: {
                        limit: 100000,
                        name: "[hash:8].[name].[ext]",
                        outputPath: 'images'
                    }
                }
            ]
        }
    ]
}

// 定义插件
const plugins = pages.map(({name}) => new htmlWebpackPlugin({
    filename: path.join(__dirname, `/public/${name}.html`),
    template: path.join(__dirname, `/src/template/${name}.temp.html`)
}))
plugins.push(new extractTextWebpackPlugin("styles.css"))

module.exports = {
    entry,
    output,
    devServer,
    module: _module,
    plugins
}

webpack打包出来的资源目录是这样的
clipboard.png

阅读 3.2k
1 个回答

既然有前端路由了,那大概率是单页应用,你首先得解决页面模块替换的问题。

然后就简单了,利用history或者hash来实现路由。点击链接,更换url,替换对应模块。

一级二级一个道理

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题