美文网首页全栈开发
React多页面应用

React多页面应用

作者: 活在初音的未来 | 来源:发表于2018-03-01 09:50 被阅读11744次

之前使用react开发了一个单页面的后台管理项目。因为项目越来越大,并且奇怪的需求越来越多,单页面给许多功能的开发带来了不好的体验,因此趁着这个机会研究了一下多页面开发方式。
在网上查了好多资料,但大部分都讲得有点模糊,不够详细,对于我这种菜鸟来说开发体验极差-_-||,明明很简单的东西……
所以,特此记录,以便于自己日后回顾学习。

言归正传

本文只需要使用者对react框架有基础的认识,并且能够动手跟着一起操作(看再多也不如敲两行代码),我也是一遍操作一遍写,确保能够正常运行。对于常用的运行环境,不另做讲解,可以搜索相关词条,自己动手查资料。

1、创建react项目
使用FB提供的脚手架----create-react-app进行项目创建:
create-react-app multipage


image.png

2、显示webpack相关文件:
npm run eject
当询问是否确认弹出?该操作不可逆的时候,输入Y,或者Y开头的任何词语,╮(╯_╰)╭
项目会对出这两个目录


image.png

我们主要用到的是webpack.config.dev.js(开发环境)和webpack.config.prod.js(生产环境)。因为我只是在本地开发测试的,所以不确定product下是否会有差别。其实应该是没有的,但坑踩多了,人就怂了- -。

3、整理src目录
为了保证目录清晰,删除一切多余的文件(图标、样式),仅保留必须的js文件,并按照真正的项目创建目录:


image.png

4、修改webpack.config.dev.js配置
我们主要修改以下几处


image.png
module.exports = {
//修改入口配置。
entry: {
  home:[
    //引入三个es6新特性
    require.resolve('./polyfills'), 
    //热更新
    require.resolve('react-dev-utils/webpackHotDevClient'),
    //入口文件,仅需修改此行代码
    path.resolve(paths.appSrc, "index.js")
    // paths.appIndexJs
  ],
  pageF:[
    //引入三个es6新特性
    require.resolve('./polyfills'),
    //热更新
    require.resolve('react-dev-utils/webpackHotDevClient'),
    //入口文件,仅需修改此行代码
    path.resolve(paths.appSrc, "pageF/index.js")
  ],
  page0:[
    //引入三个es6新特性
    require.resolve('./polyfills'),
    //热更新
    require.resolve('react-dev-utils/webpackHotDevClient'),
    //入口文件,仅需修改此行代码
    path.resolve(paths.appSrc, "pageF/page0/index.js")
  ],
  page1:[
    //引入三个es6新特性
    require.resolve('./polyfills'),
    //热更新
    require.resolve('react-dev-utils/webpackHotDevClient'),
    //入口文件,仅需修改此行代码
    path.resolve(paths.appSrc, "pageF/page1/index.js")
  ],
  pageS:[
    //引入三个es6新特性
    require.resolve('./polyfills'),
    //热更新
    require.resolve('react-dev-utils/webpackHotDevClient'),
    //入口文件,仅需修改此行代码
    path.resolve(paths.appSrc, "pageS/index.js")
  ]
},
output: {
  // Add /* filename */ comments to generated require()s in the output.
  pathinfo: true,
  // This does not produce a real file. It's just the virtual path that is
  // served by WebpackDevServer in development. This is the JS bundle
  // containing code from all our entry points, and the Webpack runtime.
  //修改此处,防止JS名称重复
  filename: 'static/js/[name].[hash:8].js',
  chunkFilename: 'static/js/[name].[hash:8].chunk.js',
  // This is the URL that app is served from. We use "/" in development.
  publicPath: publicPath,
  // Point sourcemap entries to original disk location (format as URL on Windows)
  devtoolModuleFilenameTemplate: info =>
    path.resolve(info.absoluteResourcePath).replace(/\\/g, '/'),
},

plugins:[
  new InterpolateHtmlPlugin(env.raw),
  new HtmlWebpackPlugin({
    inject: true,
    template: paths.appHtml,
  }),
  //添加以下内容
  new HtmlWebpackPlugin({
    inject: true,
    chunks: ['home'],
    template: paths.appHtml,
    filename: "index.html"
  }),
  new HtmlWebpackPlugin({
    inject: true,
    chunks: ['pageF'],
    template: paths.appHtml,
    filename: "pageF/index.html"
  }),
  new HtmlWebpackPlugin({
    inject: true,
    chunks: ['page0'],
    template: paths.appHtml,
    filename: "pageF/page0/index.html"
  }),
  new HtmlWebpackPlugin({
    inject: true,
    chunks: ['page1'],
    template: paths.appHtml,
    filename: "pageF/page1/index.html"
  }),
  new HtmlWebpackPlugin({
    inject: true,
    chunks: ['pageS'],
    template: paths.appHtml,
    filename: "pageS/index.html"
  }),
  //结束
  new webpack.NamedModulesPlugin(),
  new webpack.DefinePlugin(env.stringified),
  new webpack.HotModuleReplacementPlugin(),
  new CaseSensitivePathsPlugin(),
  new WatchMissingNodeModulesPlugin(paths.appNodeModules),
  new webpack.IgnorePlugin(/^\.\/locale$/, /moment$/),
]

}

5、修改js
因为附带的有git地址,因此只粘贴home页面的JS

import React, { Component } from 'react';
import ReactDOM from 'react-dom';

class App extends Component {
  render() {
    return (
      <div className="App">
        <header className="App-header">
          <h1 className="App-title">Welcome to React</h1>
        </header>
        <p className="App-intro">
          To get started, edit <code>src/App.js</code> and save to reload.
        </p>
        <a href="pageF/index.html">pageF</a>
        <div>
          <a href="pageS/index.html">pageS</a>
        </div>
      </div>
    );
  }
}

ReactDOM.render(<App />, document.getElementById('root'));

操作流程就是这样,改天再对各个部分进行解释标注
附上git地址:https://github.com/chuyinweilai/React/tree/master/multipage

相关文章

  • 使用webpack配置多页面应用

    多页面应用 说到多页面应用,我们先来熟悉一下相反的单页面应用,提起单页面应用大家一定不会陌生,像vue、react...

  • React多页面应用

    之前使用react开发了一个单页面的后台管理项目。因为项目越来越大,并且奇怪的需求越来越多,单页面给许多功能的开发...

  • React多页面应用v1.3.0

    react-multi-page-app是一个基于react和webpack的多页面应用架构,通过编译生成对应目录...

  • 2018-03-21

    react webpack 多页面应用的配置 项目的目录结构 webpack 配置文件 目录 webpack....

  • webpack构建react多页面应用

    写这个的初衷是很难找一个简洁的项目脚手架,很多脚手架都有很多依赖,光看依赖就要很久,所以自己参照网上的内容,弄个这...

  • 在React中使用react-router-dom路由

    在React中使用react-router-dom路由 使用React构建的单页面应用,要想实现页面间的跳转,首先...

  • webpack+express+react系列二(路由配置)

    作为一个单页面应用,使用react框架必然需要用上react-router来实现页面跳转。React Router...

  • react router4 按需加载

    众所周知,使用react,基本上都是react + router + redux的单页面应用的套路,好用,但是应用...

  • React多页面应用3(webpack4 多页面实现)

    本教程总共9篇,每日更新一篇,请关注我们!你可以进入历史消息查看以往文章,也敬请期待我们的新文章! 1、React...

  • create-react-app路由的实现原理

    create-react-app中路由的简要阐述 用create-react-app创建出来的应用为单页面应用,什...

网友评论

    本文标题:React多页面应用

    本文链接:https://www.haomeiwen.com/subject/sxeixftx.html