webpack构建react多页面应用详解


Posted in Javascript onSeptember 15, 2017

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

利用creat-react-app 新建一个react应用

npm install -g create-react-app

然后创建一个项目

create-react-app demo

create-react-app会自动初始化一个脚手架并安装 React 项目的各种必要依赖,如果在过程中出现网络问题,请用cnpm淘宝镜像安装。

然后我们进入项目并启动。

cd demo

然后启动项目

npm start

那就会看到如下页面

webpack构建react多页面应用详解

然后进入src/App.js,用下面代码替换App.js中的代码(因为在webpack中暂时不想处理图片和icon)

import React, { Component } from 'react';
import './App.css';

class App extends Component {
 render() {
  return (
   <div className="App">
    <div className="App-header">
     <h2>Welcome to App</h2>
    </div>
    <p className="App-intro">
     To get started, edit <code>src/App.js</code> and save to reload.
    </p>
   </div>
  );
 }
}

export default App

然后将 index.js 中的 内容替换为如下代码(删除registerServiceWorker)

import React from 'react';
import ReactDOM from 'react-dom';
import './index.css';
import App from './App';


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

然后删除src下面的registerServiceWorker.js(该文件用于构建pwa应用用的,暂时我们用不了)和 logo.svg文件(不想处理图片文件)和 App.test.js(用于测试用的)。

现在src/下面有四个文件。接下来,在src下面新建两个文件夹 app1和 app2,分别将原来的四个文件拷贝进入app1和app2。文件目录如下:

webpack构建react多页面应用详解

接下来,进入public文件下,删除favicon.ico(不想处理)和 manifest.json(构建pwa用的),然后将index.html中的内容用如下内容替换

<!doctype html>
<html lang="en">
 <head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
  <meta name="theme-color" content="#000000">
  <title>React App</title>
 </head>
 <body>
  <noscript>
   You need to enable JavaScript to run this app.
  </noscript>
  <div id="root"></div>
 </body>
</html>

这个index.html就是我们的模版html。

进入正题,开始install webpack和配置webpack

1.安装依赖。将package.json文件用下面的文件替代

{
 "name": "demo",
 "version": "0.1.0",
 "private": true,
 "dependencies": {
  "react": "^15.6.1",
  "react-dom": "^15.6.1"
 },
 "devDependencies": {
  "babel-core": "^6.26.0",
  "babel-loader": "^7.1.2",
  "babel-preset-es2015": "^6.24.1",
  "babel-preset-react": "^6.24.1",
  "clean-webpack-plugin": "^0.1.16",
  "css-loader": "^0.28.7",
  "extract-text-webpack-plugin": "^3.0.0",
  "file-loader": "^1.0.0",
  "glob": "^7.1.2",
  "html-webpack-plugin": "^2.30.1",
  "postcss-loader": "^2.0.6",
  "style-loader": "^0.18.2",
  "url-loader": "^0.5.9",
  "webpack": "^3.5.6",
  "webpack-dev-server": "^2.8.1"
 },
 "scripts": {
  "start": "webpack-dev-server --open",
  "build": "webpack"
 }
}

2.删除当前目录中的node_modules,然后重新在控制台执行

npm i

3.在根目录下也就是/demo下新建一个webpack.config.js文件,写入如下代码

const webpack = require('webpack');
const glob = require('glob');
const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const ExtractTextPlugin = require('extract-text-webpack-plugin');
const CleanWebpackPlugin = require('clean-webpack-plugin');

const webpackConfig = {
  entry: {},
  output:{
    path:path.resolve(__dirname, './dist/'),
    filename:'[name].[chunkhash:6].js'
  },
  //设置开发者工具的端口号,不设置则默认为8080端口
  devServer: {
    inline: true,
    port: 8181
  },
  module:{
    rules:[
      {
        test:/\.js?$/,
        exclude:/node_modules/,
        loader:'babel-loader',
        query:{
          presets:['es2015','react']
        }
      },
      {
        test: /\.(scss|sass|css)$/, 
        loader: ExtractTextPlugin.extract({fallback: "style-loader", use: "css-loader"})
      },
      
    ]
  },
  plugins: [
    new ExtractTextPlugin("[name].[chunkhash:6].css"),
    new CleanWebpackPlugin(
      ['dist'],  
      {
        root: __dirname,    




        verbose: true,    





        dry:   false    





      }
    )
  ],
};

// 获取指定路径下的入口文件
function getEntries(globPath) {
  const files = glob.sync(globPath),
   entries = {};
  files.forEach(function(filepath) {
    const split = filepath.split('/');
    const name = split[split.length - 2];
    entries[name] = './' + filepath;
  });
  return entries;
}
    
const entries = getEntries('src/**/index.js');

Object.keys(entries).forEach(function(name) {
  webpackConfig.entry[name] = entries[name];
  const plugin = new HtmlWebpackPlugin({
    filename: name + '.html',
    template: './public/index.html',
    inject: true,
    chunks: [name]
  });
  webpackConfig.plugins.push(plugin);
})

module.exports = webpackConfig;

4.然后用直接执行如下代码

npm run build

成功在dist中看到你的两个页面app1和app2.

如果要自己调试用直接启用npm run start,然后在localhost:8181/app1.html查看页面进行调试。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
js DataSet数据源处理代码
Mar 29 Javascript
JavaScript学习点滴 call、apply的区别
Oct 22 Javascript
js运动动画的八个知识点
Mar 12 Javascript
JS+CSS实现大气的黑色首页导航菜单效果代码
Sep 10 Javascript
JQuery通过AJAX从后台获取信息显示在表格上并支持行选中
Sep 15 Javascript
js判断手机号运营商的方法
Oct 23 Javascript
JS获取html元素的标记名实现方法
Oct 08 Javascript
jQuery UI插件实现百度提词器效果
Nov 21 Javascript
树结构之JavaScript
Jan 24 Javascript
Require.JS中的几种define定义方式示例
Jun 01 Javascript
基于JavaScript实现图片连播和联级菜单实例代码
Jul 28 Javascript
基于jQuery实现挂号平台首页源码
Jan 06 jQuery
详解Vue中一种简易路由传参办法
Sep 15 #Javascript
JavaScript实现换肤功能
Sep 15 #Javascript
jQuery实现火车票买票城市选择切换功能
Sep 15 #jQuery
详解Vue.js Mixins 混入使用
Sep 15 #Javascript
详解axios 全攻略之基本介绍与使用(GET 与 POST)
Sep 15 #Javascript
Node.js实现连接mysql数据库功能示例
Sep 15 #Javascript
vue实现登陆登出的实现示例
Sep 15 #Javascript
You might like
PHP 文章中的远程图片采集到本地的代码
2009/07/30 PHP
PHP获取文件行数的方法
2015/06/10 PHP
PHP7新特性foreach 修改示例介绍
2016/08/26 PHP
Jquery 插件开发笔记整理
2011/01/17 Javascript
javascript object array方法使用详解
2012/12/03 Javascript
javascript中的throttle和debounce浅析
2014/06/06 Javascript
教你在heroku云平台上部署Node.js应用
2014/07/30 Javascript
详解JavaScript中setSeconds()方法的使用
2015/06/11 Javascript
微信开发之调起摄像头、本地展示图片、上传下载图片实例
2016/12/08 Javascript
Angular directive递归实现目录树结构代码实例
2017/05/05 Javascript
Angular父组件调用子组件的方法
2018/04/02 Javascript
Express本地测试HTTPS的示例代码
2018/06/06 Javascript
jQuery轮播图实例详解
2018/08/15 jQuery
Element Notification通知的实现示例
2020/07/27 Javascript
你不知道的 TypeScript 高级类型(小结)
2020/08/28 Javascript
Python设计模式之代理模式实例
2014/04/26 Python
Python中os.path用法分析
2015/01/15 Python
python通过pil模块将raw图片转换成png图片的方法
2015/03/16 Python
使用Python中的线程进行网络编程的入门教程
2015/04/15 Python
Python3使用requests包抓取并保存网页源码的方法
2016/03/15 Python
Phantomjs抓取渲染JS后的网页(Python代码)
2016/05/13 Python
Python处理PDF及生成多层PDF实例代码
2017/04/24 Python
Python模块结构与布局操作方法实例分析
2017/07/24 Python
rabbitmq(中间消息代理)在python中的使用详解
2017/12/14 Python
基于django ManyToMany 使用的注意事项详解
2019/08/09 Python
CSS3制作皮卡丘动画壁纸的示例
2020/11/02 HTML / CSS
Bulk Powders意大利:运动补充在线商店
2019/02/09 全球购物
创建无烟单位实施方案
2014/03/29 职场文书
十佳好少年事迹材料
2014/08/21 职场文书
少先队活动总结
2014/08/29 职场文书
企业务虚会发言材料
2014/10/20 职场文书
微观世界观后感
2015/06/10 职场文书
初中毕业感言300字
2015/07/31 职场文书
学术会议开幕词
2016/03/03 职场文书
pandas中关于apply+lambda的应用
2022/02/28 Python
Python利用FlashText算法实现替换字符串
2022/03/31 Python