在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作用等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)