从0搭建React+antd+TypeScript+Umi Hooks+Mobx前端框架

从0搭建React+antd+TypeScript+Umi Hooks+Mobx前端框架,第1张

在Vue开发当中经常会遇到各种各样的接口问题,最近在项目中遇到开发和线上环境接口路径不一样的问题,网上找到很多博客,大多都是千篇一律的复制粘贴,对于新手来说可能比较难以理解,所以我写这篇博客分享给刚使用vue做项目的小萌新同学一个详细的接口配置思路。

webpack提供了生产环境和线上环境的两种配置文件,平时开发当中使用一个接口,项目上线后就会自动切换成另外一个接口,废话不多说,下面上图。首先是找到vue-cli项目中config文件夹下的devenvjs,默认是下面的样子:

然后我们需要添加开发环境中使用的请求后台数据的接口域名,如下图:

url_api是我自己设置的,可以自定义。后面的路径就是你自己开发环境中的接口。

接着找到prodenvjs,默认如下图:

在这个文件中同样添加线上请求接口的配置:

最后在自己封装的axios中去调用这个接口:

自定义变量 = processenvurl_api(这个就是刚才在config两个文件中自定义的),拼接url到封装的axios中。最后在生产环境中npm run dev 的时候会自动调用刚才在devenvjs中定义的接口,当使用npm run build 去打包的时候会自动调用prodenvjs中配置的接口。

另外:跨域的问题

     可能有些小伙伴在vue中配置了跨域的代理,所以导致拼接url中proxy代理失效,依然出现跨域的问题,解决这个问题我的个人思路是代理配置不变,只需要在devenvjs中用空字符串替换本地接口。就不会出现开发环境中跨域的问题了。有不明白的可以问我,有更好的方案也希望能不吝赐教,谢谢。

链接:>

其中build文件夹中的webpackprodconfjs是我们主要注意的文件,我们在该文件中动态设置不需要被打包的模块并构建出合适的链接。

在webpack项目中,所引入的第三方资源会被统一打包进vender文件中,我们通过webpack的 externals 属性可以设置打包时排除该模块,详情说明见 外部扩展(externals) 。

在前面的步骤中,我们创建的项目包括vue、vue-router,在正式开发在还会有ui库,如element-ui,为了方便演示,我们再安装element-ui和axios两个模块,并实现在构建是把这是个模块以cdn的形式引入。

注意安装时记得-S,它的作用是安装完后在packagejson项目文件中插入记录,后续 *** 作需要读取已安装模块

对于cdn,我们可以自己搭建,也可以使用专业的cdn服务商,这里使用免费的cdn bootcdn 。选用免费cdn有很多好处,但毕竟有隐患,那就是服务有可能会奔溃。

依次搜索出前面模块,结果如下

按照规律,得出cdn资源路径规则为

使用cdn其实也就是在webpack热启动和打包项目的时候动态插入script和style链接,为了方便维护,我们通过在build/utilsjs文件上添加几个方法,将来在webpackdevconfjs和webpackprodconfjs上可以使用。

如果没有build/utilsjs,可以在其他文件上添加,只要在后续步骤中能 *** 作到就行

1添加cdn根地址

2添加cdn模块 按照需要删改

这里特别注意scope,它是webpack配置的external参数下的信息,比如vue的作用域命名是Vue,vue-router的作用域命名是VueRouter,element-ui的作用域命名是ELEMENT,同理,jq的作用域命名是JQuery,具体做法是先引入该资源,然后在控制台依次输入近似的值,一个个匹配(目前没找到更好的做法)。

3添加获取版本号方法

4导出不需要被打包的cdn模块配置重点

在webpack热启动本地调试的时候,我们可以使用cdn。

在build/webpackdevconfjs中,默认已经引入了utilsjs,所以可以直接调用相关方法,如果是自定义的文件,记得引入。

紧接着我们在该文件下找到devWebpackConfig下的plugins下的HtmlWebpackPlugin插件,它的作用是动态构建html页面,原始配置如下:

我们可以往里面添加点自定义属性,方便在indexhtml中调用。,修改如下:

其中cdnConfig和onlyCss自定义属性,在html上通过htmlWebpackPluginoptions可以读取到。

更多html-webpack-plugin配置情况官网,这里暂时不需要更多。

webpackprodconfjs添加cdn配置和忽略模块

在打包的时候,我们使用cdn,配置和前面dev的差不多,只不过需要做多一步。

注意此处的externalModules,后面用到,也就是比dev多的步骤。

externals代表构建时不需要被处理的模块,也就是前面说的scope需要注意的地方。

和dev一样,我们修改webpackConfig下的plugins下的HtmlWebpackPlugin插件配置 (这里的默认配置比dev的多,主要是css压缩和js压缩相关)

加入和dev一样的两个配置,不过需要把onlyCss改为true,因为我们希望打包时不单单使用css。

webpack配置已经完成,在html-webpack-plugin中已经添加了相关参数,我们再在页面上可以直接使用,使用语法是ejs,和aspnet,jsp,php类似。

关于webpackconfigjs文件没有的原因

Vue 项目中 vueconfigjs 文件就等同于 webpack 的 webpackconfigjs。

vue-cli3 之后创建的时候并不会自动创建 vueconfigjs,因为这个是个可选项,所以一般都是需要修改 webpack 的时候才会自己创建一个 vueconfigjs。

vue-cil3之后创建项目后的目录结构如下

├── READMEmd # 说明

|-- dist # 打包后文件夹

├── babelconfigjs # babel语法编译

├── package-lockjson

├── public # 静态文件夹,这类资源将会直接被拷贝,而不会经过 webpack 的处理。

│ ├── faviconico

│ └── indexhtml #入口页面

└── src # 源码目录

├── Appvue - 页面

├── assets - 静态目录,这类引用会被 webpack 处理。

│ └── logopng

├── components 组件

│ └── HelloWorldvue

└── mainjs # 入口文件,加载公共组件

│—— vueconfigjs # 配置文件,需自行配置

│—— gitignore # git忽略上传的文件格式

│—— babelconfigjs # babel语法编译

│—— packagejson # 项目基本信息

│—— env # 环境变量和模式,需自行配置

│—— eslintrcjs # ES-lint校验

开发者一般不需要再去知道 webpack 做了什么,所以没有暴露 webpack 的配置文件,但你依然可以创建 vueconfigjs 去修改默认的 webpack。

Vue-cli3+ 和 Vue-cli2 的最大区别:在于内置了很多配置,没有 build 文件夹和 config 的配置。但是在开发中,避免不了的还是需要个性化的配置,这里讲一下 vueconfigjs 的配置。

手动创建一个 vueconfigjs

moduleexports = {

publicPath: '/', // 基本路径

outputDir: 'dist', // 构建时的输出目录

assetsDir: 'static', // 放置静态资源的目录

indexPath: 'indexhtml', // html 的输出路径

filenameHashing: true, // 文件名哈希值

lintOnSave: false, // 是否在保存的时候使用 `eslint-loader` 进行检查。

// 组件是如何被渲染到页面中的? (ast:抽象语法树;vDom:虚拟DOM)

// template ---> ast ---> render ---> vDom ---> 真实的Dom ---> 页面

// runtime-only:将template在打包的时候,就已经编译为render函数

// runtime-compiler:在运行的时候才去编译template

runtimeCompiler: false,

transpileDependencies: [], // babel-loader 默认会跳过 node_modules 依赖。

productionSourceMap: false, // 是否为生产环境构建生成 source map

//调整内部的 webpack 配置

configureWebpack: () => { },

chainWebpack: () => { },

// 配置 webpack-dev-server 行为。

devServer: {

open: true, // 编译后默认打开浏览器

host: '0000', // 域名

port: 8080, // 端口

>

文档地址

before:可获取 node 服务 app 实例,执行中间件 *** 作

comporess:打开 gzip 压缩服务器可访问内容。暂时认为开发环境不开比较好,易于调试。

contentbase(非常重要):Tell the server where to serve content from。可传多个路径,建议用绝对路径。

publicPath:determine where the bundles should be served from(把 bundled 文件放在定义目录下,默认为 ‘/’)

hot:是否开启热更新。设为 true 则会自动加载插件 :      webpackHotModuleReplacementPlugin  

hotOnly:页面返回时是否不刷新页面,以防页面构建失败。

>

以上就是关于从0搭建React+antd+TypeScript+Umi Hooks+Mobx前端框架全部的内容,包括:从0搭建React+antd+TypeScript+Umi Hooks+Mobx前端框架、不依赖vue-cli脚手架创建vue项目、webpackChunkName与webpackPrefetch作用等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9799841.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-02
下一篇 2023-05-02

发表评论

登录后才能评论

评论列表(0条)

保存