react+mobx脚手架搭建多页面开发

摘要:
脚本主要是项目运行和包所依赖的文件,通常不会更改。如果需要更改,将在下文中提及。

本篇主要讲一些干货,便于正在搭建框架的人使用,从搭建到配置跨域,到打包配置 ,

1、使用脚手架搭建项目,并运行下看是否安装成功,详细内容查看官网https://reactjs.bootcss.com/tutorial/tutorial.html#setup-for-the-tutorial 里的

react+mobx脚手架搭建多页面开发第1张

2、npm run eject 暴露webpack,便于后面引入新的东西进行配置,就不用手动写webpack配置了,框架都给配置好了。

3、npm run eject之后会多出来两个文件夹:config里主要的是webpack.config.js文件,用于进行配置。scripts主要是项目运行及打包依赖的文件,一般不做改动。如需涉及改动下面会提及。

react+mobx脚手架搭建多页面开发第2张

3、因为要使用mobx所以需要下载mobx和装饰器

npm installmobx mobx-react -S
npm install @babel/plugin-proposal-decorators @babel/plugin-proposal-class-properties -D
4、修改配置文件 打开package.json文件,并且找到"babel",然后添加以下代码:
 "babel": {
    "presets": [
      "react-app"],
    "plugins": [
      ["@babel/plugin-proposal-decorators", { "legacy": true}]
      ]
  },

5、安装依赖,这条命令安装上面npm run eject改动文件之后的依赖

npm install

6、如何需要使用antd-mobile ,先用安装按需加载的插件

npm install babel-plugin-import --save-dev

7、安装antd-mobile

npm install antd-mobile --save

8、在package.json里的babel里进行配置: [

 "import",
        {
          "libraryName": "antd-mobile",
          "style": "css"}
      ]

9、使用css-module不用改变任何配置,直接参考css-module文章

10、使用less
npm install less less-loader --save
11 、配置webpack.config.js ,修改config/webpack.config.js
新增less配置变量
const cssRegex = /.css$/;
const cssModuleRegex = /.module.css$/;
const sassRegex = /.(scss|sass)$/;
const sassModuleRegex = /.module.(scss|sass)$/;
const lessRegex = /.less$/;  //新增less配置
const lessModuleRegex = /.module.less$/; //新增less配置,这个其实不配置也行
增加module下面rule规则,可以copy cssRegex或者sassRegex的配置。
{
    test: sassModuleRegex,
    use: getStyleLoaders({
            importLoaders: 2,
            sourceMap: isEnvProduction &&shouldUseSourceMap,
            modules: true,
            getLocalIdent: getCSSModuleLocalIdent
        },
        "sass-loader")},
{
    test: lessRegex,
    exclude: lessModuleRegex,
    use: getStyleLoaders({
            importLoaders: 1,//值是1
            modules: true, //增加这个可以通过模块方式来访问css
            sourceMap: isEnvProduction &&shouldUseSourceMap
        },
        "less-loader"),
    sideEffects: true},
//这个测试删了也不影响{
test: lessModuleRegex,
    use: getStyleLoaders({
            importLoaders: 1,
            sourceMap: isEnvProduction &&shouldUseSourceMap,
            modules: true,
            getLocalIdent: getCSSModuleLocalIdent
        },
        "less-loader")},

12、使用vscode编辑器写mobx是会报红色波浪线,进行如下操作:操作完关闭编辑器再打开就可以了。

在根目录下创建一个jsconfig.json文件,写上

{
    "compilerOptions": {
      "module": "commonjs",
      "target": "es6",
      "experimentalDecorators": true},
    "include": ["src/**/*"]
  }

13、配置跨域

yarn add http-poxy-middleware -S

在src/根目录下新建 setupProxy.js文件 进行如下配置:
const {createProxyMiddleware} = require("http-proxy-middleware");
    module.exports = function(app){
        app.use(
            createProxyMiddleware("/api",{
                target:"http://47.96.0.211:9000",
                changeOrigin:true,
                pathRewrite:{
                "^/api":""}
            })
        )
    }
如果跨域报错,就把createProxyMiddleware改成proxy;
constproxy=require("http-proxy-middleware");
console.log(proxy,'createProxyMiddleware')
module.exports=function(app){
app.use(
proxy("/api",{
target:"***",
changeOrigin:true,
pathRewrite:{
"^/api":""
}
})
)
}

14、安装axios

npm install axios --save-dev


在star.js中增加
  const devServer = newWebpackDevServer(compiler, serverConfig);
  require('../src/setupProxy')(devServer);

15、书写axios请求方法,已经封装好,可以直接套用,可根据自己需要更改

functionrequest( configObj) {
    return new Promise(function(resolve, reject) {
        axios({
            url:'*************',
            method:"post",
            //params: params,
data:configObj ,
            //timeout: timeout,
headers: {
                'Content-Type': 'application/json',
                //'token': window.sessionStorage.getItem('token') || ''
}
        }).then(function(response) {
            if(response){
                if (response.data &&response.data.code) {
                    resolve(response);
                }else{
                    resolve(response);
                }
            }else{
                resolve(response);
            }
        }).catch(function(error) {
            Toast.fail(
                '网络异常,请稍后重试');
            reject(error);
        })
    })
}

16、到这整个项目算是很完善了,为适应多项目开发,下面是配置多入口多出口。总结出两种办法,这里介绍第一种。

17、配置configwebpack.config.js文件,修改入口和出口;在module.exports外配置就可以

入口参数配置,出口为 【入口的key】.html
const entryParams = {pageOne: [paths.appSrc + "/pageOne/index.js",],pageTwo: [paths.appSrc + "/pageTwo/index.js",]};

18、在module.exports内找个位置放入如下代码:

let enterObjKeys = Object.keys(entryParams) ||[];
 //入口参数组装  出口参数组装
    let outParams =[];
    enterObjKeys.forEach(item =>{
     entryParams[item].unshift(require.resolve('react-dev-utils/webpackHotDevClient'));
   outParams.push(isEnvProduction && newHtmlWebpackPlugin({
        inject: true,
       template: paths.appHtml,
      chunks: [item],
       filename: item + '.html',
       minify: {
          removeComments: true,
          collapseWhitespace: true,
          removeRedundantAttributes: true,
         useShortDoctype: true,
          removeEmptyAttributes: true,
          removeStyleLinkTypeAttributes: true,
          keepClosingSlash: true,
          minifyJS: true,
         minifyCSS: true,
          minifyURLs: true,
        }
      }));
    });

19、配置entry出口

 Object.assign({}, !isEnvProduction ?{
        index: [
          require.resolve('react-dev-utils/webpackHotDevClient'),
          paths.appIndexJs,
        ]
      } : entryParams),

20、配置newHtmlWebpackPlugin,对照看下之前的直接加入下面的代码

 isEnvDevelopment &&
       newHtmlWebpackPlugin(
        {
           inject: true,
           template: paths.appHtml,
          chunks: ["index"],
           filename: 'index.html',
         }),
       ...outParams,
      isEnvProduction &&shouldInlineRuntimeChunk &&
        new InlineChunkHtmlPlugin(HtmlWebpackPlugin, [/runtime-.+[.]js/]),

21、在src下创建两个文件夹,代表两个不同的项目

react+mobx脚手架搭建多页面开发第3张

22、pageOne和pageTwo下面的两个js文件跟src目录下自带的App.js和index.js内容是一样的。

23、修改src下面的index.js引入方式,每次只能运行一个

import './pageOne' 
//import './pageTwo' 

全部完成,可以试下效果了,超级好用!

------------恢复内容结束------------

免责声明:文章转载自《react+mobx脚手架搭建多页面开发》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇最优运输(Optimal Transfort):从理论到填补的应用java的byte数组转换成在[0,255]范围内下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

webpack打包vue项目,资源路径如何从绝对路径改为相对路径?css中的图片资源如何修改配置?

资源相对引用路径 问题描述 一般情况下,通过webpack+vuecli默认打包的css、js等资源,路径都是绝对的。 但当部署到带有文件夹的项目中,这种绝对路径就会出现问题,因为把配置的static文件夹当成了根路径,那么要解决这种问题,就得引用相对路径。 解决办法 打开webpack.prod.conf.js 找到output:增加publicPat...

四: 使用vue搭建网站前端页面

---恢复内容开始--- 在搭建路由项目的时候的基本步骤 一:创建项目   安装好vue 搭好环境 (步骤在上篇博客中)   进入项目目录      cd   目录路径/ 目录名   创建项目          vue init webpack  项目名   效果:   项目文件结构:及作用    -- build...

三、Electron + Webpack + Vue 搭建开发环境及打包安装 ---- 打包electron应用

目录 Webpack + Vue 搭建开发环境及打包安装 ------- 打包渲染进程 Electron + Webpack  搭建开发环境及打包安装 ------- 打包主进程 Electron + Webpack + Vue 搭建开发环境及打包安装 ---- 打包electron应用 三、打包Election App 应用   在之前的节中已经写...

webpack安装&指定版本安装&遇到的问题

1.安装nodejs,安装完成,cmd命令行中输入node -v 查看版本号,版本号显示则说明安装成功2.npm包管理器是集成在node中的,输入 npm -v,显示npm版本号3.创建package.json文件,输入命令 npm init,工程目录下就会生成一个package.json文件(全局安装webpack) 4.安装webpack,输入命令 n...

完全方案:超详细的webpack4配置(webpack3与webpack4的差异)

webpack4的发布已经有一段时间了,听说webpack4的发布是注意到了他的亮点:实现零配置。webpack4制定了入口和出口的位置,但是实现页面应用和需要具体的功能的是时候还是避免不了进行配置一些选项。而且webpack的难点和精髓也在配置里面。webpack3对比webpack4传送门https://www.cnblogs.com/wyliunan...

vue,react项目中使用webpack打包中直接打包成压缩包的方法

这里以react项目为例,(vue项目类似) 为改造的 pageage.json 中 scripts 位置的代码 "scripts": { "start": "node scripts/start.js", "build": "node --max_old_space_size=4096 scripts/build.js", "...