webpack简单配置,路由配置,接口拦截配置,基本文件配置

新建项目

  项目脚手架搭建  react

     相关文件

        webpack.config.js

           使用相关插件

              path

              html-webpack-plugin

                html文件处理插件

              clean-webpack-plugin

                清除上次打包文件插件

              copy-webpcak-plugin

                 打包时需要复制的相关文件的插件(比如一些报表文件模版)

              speed-measure-webpack-plugin

                 速度测量插件  (const  SpeedMeasurePlugin=require("speed-measure-webpack-plugin");  const smp=newSpeedMeasurePlugin();  const webpackConfig=smp.wrap({})

              happypack

                一些loader进程管理

              打包配置

                 {

mode:’环境设置’,

  entry:‘入口文件设置’,

  output:{path:path.resovle(__dirname,’dist’),filename:’main_[hash].js’,publicPath:’根据环境设置url前缀(接口域名代理字符)’},

  models:{rules:[

说明:{

  test:‘正则匹配/.js/’

  exclude:‘排除。。。(可以设置后缀名或者文件路径)’

  include:‘包含。。。(可以设置后缀名或者文件路径)’

  loader:‘loader设置url-loader’或者use:[loader:‘  ’,oprios:{plugins:[插件设置]或者其他设置}](use[可以设置happy pack插件:happypack/loader ? id = ‘happypack插件配置的id’])

]},(loader配置)

    (loader配置顺序:如,url-loader,babel-loader,style-loader,css-loader,file-loader)

  resolve:{extensions:[’js’,’json’,’jsx’,’css’]},(在导入没有带后缀名的文件时,尝试在文件加入上面后缀名访问)

  plugins:[]    (插件配置)

}

        bable.config.js

           相关插件  (用法function(api){ api.cache(true);

              presets:[

[‘@babel/preset-env’,

                 {‘targets’:{’browsers’:["last 2 versions”,"safari >= 7”,”ie >=9”,”chrome >=49”]}}

],

                 '@babel/preset-react’

    ],

              return { “plugins”:{

      ["@babel/plugin-proposal-decorators", { "legacy": true }],(类装饰器  旧:设置legacy时需要loose支持,有顺序)

               @babel/plugin-proposal-dynamic-import,import处理插件)

               @bacel/plugin-transform-runtime,(将helper和polypill都改为从一个统一的地方引入,引入的对象和全局变量完全隔离)

["@babel/plugin-proposal-class-properties", { "loose" : true }],(解析类的属性)

               @ babel / plugin-proposal-logic-assignment-operators,(如出现短路时的逻辑处理插件)

               [''@babel/plugin-proposal-optional-chaining'',{loose:false}],(可选链优化  深层嵌套优化处理插件)               

               [''@babel/plugin-proposal-pipeline-operator'',{proposal:'minimal’}],(解析管道运算符)

               ['@babel/plugin-proposal-nullish-coalescing-operator'',{loose:false}],(删除无效的合并运算符)

      @ babel / plugin-proposal-do-expressions,(插件执行一个do{多个条件语句}表达式,最终语句完成值是该do表达式的完成值)

      @ babel / plugin-transform-spread,(扩展运算符转换插件)

      ["@babel/plugin-proposal-object-rest-spread", { "loose": true, "useBuiltIns": true }],(转扩展运算插件)

      ["@babel/plugin-transform-object-assign”],(插件支持Object.assign())

    [“import”,{libraryName: 'antd',libraryDirectory: 'es',style: true,}](and按需引入设置)

} }})

        package.json

           项目打包/启动相关插件

              webpack-dev-server

              webpack-cli

              webpack-merga

      cross-env  (插件解决window系统兼容问题)

        postcss.config.js

            可以做相关的浏览器版本兼容配置

            相关插件

               autoprefixer({prefer:false,plugin:loader=>[request(autoprefixer)({browsers:[‘ie’>=9,’Safari’>=6]})]}})

      public文件

        一些公用文件存放

      dist文件(打包后的文件)

      src文件(项目主文件)

        assets文件(存放图片等资源)

        api相关文件(api接口处理文件)

        modules文件或者pages文件

      (store文件)

        utils文件

          request.js(axios拦截文件)

             (相关插件)axios、history(使用:引入createBrowserHistory(现代浏览器使用)、createMemoryHistory(手机端使用))createBrowserHistory({basename:‘基链接(环境域名)’,forceRefresh:true  /是否强制刷新整个页面})

                axios.defaults.withCredentials = true;  //设置cross跨域并设置访问权限允许跨域携带cookie信息

                拦截设置:

  axios.interceptors.request.use(function (config) {returnconfig;(请求参数拦截处理,如:请求头添加token或者其他(config.[‘headers’].token=......))}, function (error) {returnPromise.reject(error);});

                   axios.interceptors.response.use(function (response) {returnresponse;(请求成功返回参数错误处理,如:返回不同状态码跳转不同页面,token失效重登录......)}, function (error) {returnPromise.reject(error);(请求失败错误处理,如:登录失效,跳转重新登录)});

          history.js(路由环境配置)

             配置原理(根据package.json文件里面配置的NODE_ENV==‘production’或者’development’加上webpack.config.js里面的Deserver.proxy设置的代理key来配置开发或者正式环境的url前缀,配合createBrowserHistory.basename设置)

          until.js    (公用方法文件)

        index.js(全局引入,如:utils.request、@babel/polyfill、assets/.peg、路由前缀在路由上全局配置)

        routers.js  (路由文件)

        app.js(正经的组建文件,设置页面大致框架和路由跳转设置,也能做一些全局设置)

        index.html(可以做全局引入三方资源)

————————————————————————————————————————

这里的webpack配置是根据webpack4.30版本配置,算不上目前最新版本,配置也比较繁琐,里面用了happypack快速启动快速打包的多线程插件可能会跟你项目的一些配置方式出现冲突。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,911评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,014评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 142,129评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,283评论 1 264
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,159评论 4 357
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,161评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,565评论 3 382
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,251评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,531评论 1 292
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,619评论 2 310
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,383评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,255评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,624评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,916评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,199评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,553评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,756评论 2 335

推荐阅读更多精彩内容