VueCli配置

标签: Vue 分类: Javascript 创建时间:2020-07-08 01:44:08 更新时间:2024-11-15 10:49:44

我使用的版本式vue cli 3.x

1.配置外部的js(微信js-sdk引入)

在vuecli中,引入微信的js-sdk,有两种方式,一种是使用weixin-js-sdk,一种是使用外部js文件的方式。
(1) npm安装weixin-js-sdk的方式
这种方式的引入,就比较简单了,只需要执行安装和引入就可以了。

1
2
3
4
5
6
## 安装
npm install weixin-js-sdk --save-dev

## main.js中引入
import wx from 'weixin-js-sdk'

参考文章:
2.vue-cli 引入微信js-sdk使用微信分享 (下载了npm包weixin-js-sdk)
3.vue-cli 中使用微信公众号接口 jssdk (下载了npm包weixin-js-sdk)
4.让vue-cli3.0 配置简单起来(vue.config.js编结) (这个文章对web)
5.ProvidePlugin (官方ProvidePlugin插件的用法)
6.vue/webpack 引入 cdn 资源 (如何将vuejs等内容,通过cdn的方式进行引入)

(2) 外部js文件的方式
第一种使用外部js文件的方式引入js-sdk:

下载js代码,或者使用cdn。在index.html中,添加script,然后在引入的地方忽略eslint检查

1
2
3
4
5
<script type="text/javascript" src="http://res.wx.qq.com/open/js/jweixin-1.6.0.js"></script>

// 在main.js中输出
/* eslint-disable */
console.log(wx);

其中的eslint-disable一定要加,否则就会报错

第二种使用外部js文件的方式引入js-sdk,主要分为以下几个部分,index.html中,vue.config.js中和需要使用wx的地方比如main.js中。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// index.html中引入
<script type="text/javascript" src="http://res.wx.qq.com/open/js/jweixin-1.6.0.js"></script>

// vue.config.js中配置externals
module.exports = {
configureWebpack: {
externals:{//忽略打包
'wx':'jWeixin'
}
// plugins: [
//    new webpack.ProvidePlugin({
//       wx: 'jWeixin'
//    })
// ]
}
}

// main.js中使用
import wx from 'wx'
console.log(wx);
参考文章:
1.vue cli3 引用外部js方法 (这篇文章虽然写了一部分内容,但是没有全部的vue.config.js配置文件)
2.Vue 中如何引入第三方 JS 库 (这篇文章才最终解决了我的问题。第一种和第二种都可以解决问题,第三种和第四种会出现title的问题,解决方式就是下面问题中提到的几个方法)
3.vue-cli3如何配置externals (如何配置externals)
4.使用vue cli 构建的项目,现在需要使用微信js sdk,如何使用? (这里部分的答案中,提到了如何引入外部js文件,比如使用了imports-loader这个加载器。)
5.webpack-contrib/imports-loader

问题

在vue cli 3.x配置好了微信的js-sdk之后,打开网站,出现了:Cannot read property ‘title’ of undefined

根据参考文章3:

jweixin-1.2.0.js里面的执行方式不适合直接webpack。这个问题的原因是,里面在执行this.document.title的时候出的问题,这个js期望实在浏览器全局作用域下执行(this指向window),但是webpack之后,是在一个function作用域下执行,因此this.document为undefined。

因此有几种方式修改:
(1) 改源码,将jweixin-1.2.0.js中第一个this改为window
(2) 在html中使用script引入
(3) webpack有个script-loader可以让模块文件在global环境下执行

参考文章:
1.jsweixin引入时报错Cannot read property ‘title’ of undefined
2.请问在 vue-cli 引入一个 js 文件(微信)并使用,最简单的方法是什么?
3.jsweixin引入时报错Cannot read property ‘title’ of undefined (这里提到了title问题产生的原因以及解决方法)
4.在 vue 中使用时的尴尬问题。
5.script-loader (官网讲如何使用script加载外部js,在全局上下文(global context)执行一次 JS 脚本。)

3.配置环境变量

有什么我们需要在开发环境中引入本地的http请求路径,比如localhost,在打包到线上的时候,就要换成线上的域名地址,每次打包的时候都要手动去更改,那就缺少自动化的味道了。在vue cli 2.x中,可以通过配置不同的webpack.dev.config.js文件,来区分不同的配置变量。在vue cli 3.x 增加了 .env 环境变量文件。比如:.env.development只在开发环境中引入;.env.production模式用于 vue-cli-service build 和 vue-cli-service test:e2e。

(1) 在根路径下创建.env.development和.env.production这两个文件

(2)文件中分别编写不同的环境配置

1
2
3
4
5
6
## .env.development文件内容
baseDomain="http://localhost:801"


## .env.production文件内容
baseDomain="http://bibbichuan.net"

(3) 引入环境变量

1
2
3
4
5
let baseDomain=process.env.baseDomain;

axios({
baseUrl:baseDomain
})

(4) 只有以 VUE_APP_ 开头的变量会被 webpack.DefinePlugin 静态嵌入到客户端侧的包中。你可以在应用的代码中访问它们

参考文章:
1.环境变量和模式

4.Proxy配置代理

我在代码中写 chart/data/asset/data/aqi-beijing.json,,本意就是请求:https://echarts.apache.org/examples/data/asset/data/aqi-beijing.json,可以使用 pathRewrite进行替换。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
module.exports = {
publicPath: "./",
devServer:{
host: "0.0.0.0",
port:8099,
// 设置代理proxy
proxy: {
"/xxxx": {
target: "https://xxxx/ls",
changeOrigin: true
},
"/chart":{
target: "https://echarts.apache.org/examples",
//显示代理后的地址
logLevel:'debug',
// 允许跨域
changeOrigin: true,
// 路径重写
pathRewrite: {
"^/chart": ""
}
}
}
}
}

这里还有一个地方注意,就是proxy的配置的匹配规则,是优先匹配,如果前面的已经匹配到了,就不回走后面的代理了。例如同时定义了 “/” 和 “/chart”, 那么全部的代理就都会走 “/”,而不会找到 “/chart”,即便是请求的 “/chart/data” 这样的目录。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
proxy: {
"/": {
target: "https://xxx/ls",
changeOrigin: true
},
"/chart":{
target: "https://echarts.apache.org/examples",
logger: "info",
// 允许跨域
changeOrigin: true,
// 路径重写
pathRewrite: {
"^/chart": ""
}
}
}
参考文章:
1.vue.config.js proxy里的pathRewrite 需要 pathRewrite , 用 ^/api: ‘’ 把 /api 去掉,这样既能有正确的标识,又能在请求接口的时候去掉 /api
2.VUE解决跨域的proxyTable中pathRewrite 详解
3.vue.config.js proxy里的pathRewrite
4.vue在使用了proxy后如何查看代理的真实请求地址 在proxyTable代理配置的地方设置logLevel,但是我的是proxy配置的代理。
5.vue.config.js代理配置失效 如何解决
6.vue proxy匹配规则 发现三个接口中有两个都以”/api开头”,所以当访问”/apipc/cgi-bin/musicu.fcg”这个接口时正则匹配都会转到第一个的”^/api”代理,这样就导致该接口访问不成功;
7.vue config.js proxy 代理使用记录 查看代理后的真实请求地址, proxy中加入 logLevel:‘debug’,的方法
小额赞助
本人提供免费与付费咨询服务,感谢您的支持!赞助请发邮件通知,方便公布您的善意!
**光 3.01 元
Sun 3.00 元
bibichuan 3.00 元
微信公众号
广告位
诚心邀请广大金主爸爸洽谈合作
每日一省
isNaN 和 Number.isNaN 函数的区别?

1.函数 isNaN 接收参数后,会尝试将这个参数转换为数值,任何不能被转换为数值的的值都会返回 true,因此非数字值传入也会返回 true ,会影响 NaN 的判断。

2.函数 Number.isNaN 会首先判断传入参数是否为数字,如果是数字再继续判断是否为 NaN ,不会进行数据类型的转换,这种方法对于 NaN 的判断更为准确。

每日二省
为什么0.1+0.2 ! == 0.3,如何让其相等?

一个直接的解决方法就是设置一个误差范围,通常称为“机器精度”。对JavaScript来说,这个值通常为2-52,在ES6中,提供了Number.EPSILON属性,而它的值就是2-52,只要判断0.1+0.2-0.3是否小于Number.EPSILON,如果小于,就可以判断为0.1+0.2 ===0.3。

每日三省
== 操作符的强制类型转换规则?

1.首先会判断两者类型是否**相同,**相同的话就比较两者的大小。

2.类型不相同的话,就会进行类型转换。

3.会先判断是否在对比 null 和 undefined,是的话就会返回 true。

4.判断两者类型是否为 string 和 number,是的话就会将字符串转换为 number。

5.判断其中一方是否为 boolean,是的话就会把 boolean 转为 number 再进行判断。

6.判断其中一方是否为 object 且另一方为 string、number 或者 symbol,是的话就会把 object 转为原始类型再进行判断。

每日英语
Happiness is time precipitation, smile is the lonely sad.
幸福是年华的沉淀,微笑是寂寞的悲伤。