前端踩坑系列《二》
前言
之前怀着忐忑的心情写了前端踩坑系列的第一篇,感觉有点粗制滥造,不管是排版方面还是问题的表达方面都有待提升,但也得到了一些鼓励。不管怎样,都会坚持去做!相对于第一篇,自己还是做了一些改进。
- 以后这个系列的话,每篇三个问题,这些问题可能不一定是我自己遇到的,有可能是同事遇到的,也有可能是团队遇到的。问题会以
top 3
、top 2
、top 1
的形式带给大家 - 排版上采用了一个大佬写的微信排版编辑器工具,最大的好处是支持
markdown
,而且代码的主题可以选择
Top 3
问题描述
在打包过程中,我们所希望的肯定都是按需打包,要不然我们最终出来的目录将会很大。 看这段代码
-
let api
-
if
(process.env.IS_WX_MINI)
{
-
api =
require('./index.mp').default
-
}
else
{
-
api = MST.default.api
-
}
-
export
default api
我们希望在 web
端打包的时候,不会去打包 ./index.mp
目录下的东西。但实际的情况是,并没有做到忽略这个路径。那么问题出现在哪里?
问题解决
其实在 web
端打包的时候,看process.env.IS_WX_MINI
值为 undefined
,这是因为我们在web中webpack
的 DefinePlugin 配置中没有配 IS_WX_MINI
这个参数。配置 webpack
-
config = merge(config,
{
-
plugins:
[
-
new webpack.DefinePlugin({
-
'process.env':
{
-
NODE_ENV:
'"development"',
-
IS_WX_MINI:
'false'
-
}
-
})
-
]
-
})
这个时候就可以了。查了一下 DefinePlugin
这个插件的使用,发现它确实有这种能力。 如下所示:
但实际上还是有一个问题,就是不仅 undefined
这个条件没有办法识别并按需加载,我们的试验中,就算手动赋值条件为false
也是没有做到按需加载。
那么自己尝试得出一个结论,所有的条件判别都应该通过 DefinePlugin
去做才能做到按需加载
参考
webpack DefinePlugin
webpack 中为什么要使用 define Plugin
Top 2
问题描述
在开发的时候,在某个文件夹下,我们称它为 comp
,添加了文件夹以及文件, git
都没有办法追踪到。
测试发现:
- 在该目录下,在
comp
下面,之前的文件进行修改,可以追踪,所有新增的文件以及文件夹都没有被追踪 - 其他项目新建的文件夹均可被追踪
复现遗漏点
- 新建一个和该文件一样名称的文件,eg:
comp
问题解决
方法一
首先,我们第一反应肯定是 .gitignore
文件的配置出现了问题。然而看了一下,并没有忽略…
方法二
清除 git
缓存。
-
git rm -r --cached .
没有作用!
方法三 大神的解法,发现有全局配置可以进行文件的忽略(这个操作最好不要用…)
一般的路径在 /Users/用户名
下面,文件名为 gitignore_global
.(这是一个隐藏文件)。
然后,我们编辑里面的内容即可(跟普通项目中 .gitignore
类似)。
参考: Git 全局忽略
问题总结
- 不要随意修改全局配置的东西。这个我印象中没有修改,目前认为是操作一些可视化的
git
工具导致。如:sourceTree
Top 1
问题描述
在 APP 中,执行了一定的操作后, APP 闪退 机型:IOS8
问题解决
发现执行了这一句就偶尔会崩溃,既 APP
会闪退。(这个 success
是结果设置结果反馈中的成功情况下的相关设置)
alert(JSON.stringify(this.resultFeedback.success));
// 执行这一句 crash
那为什么?
可能原因一
可能异步操作了这个数据,毕竟是偶现的,我怀疑是不是异步哪里会修改到这个数据导致闪退。结果并没有发现相关的异步操作。
可能原因二
success
下面的数据有问题,数据如下,我们可以发现,下面的嵌套是很深的,有没有可能是因为 JSON
嵌套层级或者数据量的问题导致 APP
闪退的呢?
为了验证这一点,如果我们在上面一句代码上加上以下这一句,这样 success
的值就只是一个空对象了。再在真机上测试,没问题了!!!
this.resultFeedback.success =
{};
发现并没有重现 crash
的问题。那我们试下得出一个大胆的猜想(未官方验证)
嵌套层级太深的 JSON
在 IOS8
下面可能会导致 crash
其实还有一种可能就是 JSON的数据量过大会导致 IOS8 crash
,但其实数据量很小,所以我否决了这种可能。
参考: Website repeatedly reloads, then crashes on iPhone 4: iOS 8.0.2 & iOS 8.1.2
- linux学习第四十四篇:Nginx安装,Nginx默认虚拟主机,Nginx域名重定向
- linux学习第四十二篇:PHP扩展模块安装
- linux学习第四十五篇:Nginx访问日志,Nginx日志切割,静态文件不记录日志和过期时间
- 合格的配置中心应有的素养No.76
- linux学习第四十六篇:Nginx防盗链,Nginx访问控制,Nginx解析php相关配置,Nginx代理
- linux学习第四十七篇:Nginx负载均衡,ssl原理,生产ssl密钥对,Nginx配置ssl
- linux学习第四十八篇:php-fpm的pool,php-fpm慢执行日志,定义open_basedir,php-fpm进程管理
- linux学习第五十一篇:NFS介绍,NFS服务端安装配置,NFS配置选项
- linux学习第五十二篇: exportfs命令,NFS客户端问题,FTP介绍,使用vsftpd搭建ftp服务
- linux学习第五十四篇:Tomcat介绍,安装jdk,安装Tomcat
- linux学习第五十九篇:LVS DR模式搭建,keepalived lvs
- linux学习第五十四篇:配置Tomcat监听80端口,配置Tomcat的虚拟主机,Tomcat日志
- linux学习第五十六篇:集群介绍,keepalived介绍,用keepalived配置高可用集群
- linux学习第五十八篇: 负载均衡集群介绍,LVS介绍,LVS的调度算法,LVS NAT模式搭建
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- linux下获取文件的创建时间与实战教程
- Android 判断网络状态及开启网路
- Android判断后台服务是否开启的两种方法实例详解
- 在CentOS7上搭建Jenkins+Maven+Git持续集成环境的方法
- Linux 实现定时文件占用磁盘空间大小操作方法
- Android开发之文件操作详解
- Linux查看服务器硬件信息的方法步骤
- Android实现EditText的富文本编辑
- Android仿搜狐视频、微视等列表播放视频功能
- android如何获取联系人所有信息
- Android条目拖拽删除功能实例代码
- Android Button点击事件的四种实现方法
- Android的App启动时白屏的问题解决办法
- Android获取本机各种类型文件的方法
- Android保存联系人到通讯录的方法