雅荷心语博客
雅荷心语
心之所向便是光
  • 首页
  • 前端之旅
  • 后端之路
  • 软件工具
  • 心灵鸡汤
  • 心路历程
  • 视频资料
  • 关于我们
    • 关于我
    • 关于我
  • 微信平台
    • 业务合作
  • 首页
  • 前端之旅
  • 后端之路
  • 软件工具
  • 心灵鸡汤
  • 心路历程
  • 视频资料
  • 关于我们
    • 关于我
    • 关于我
  • 微信平台
    • 业务合作
  • 关注本站
    • 微信
    • 微博
    • 腾讯微博
    • Twitter
    • Facebook
    • RSS订阅
Hi, 请登录     我要注册     找回密码
分享到:

前端之旅 第8页

去分类设置中添加分类描述吧

网页使用js屏蔽鼠标右键及一些快捷按键

2020-06-04admin阅读(1483)评论(0)

不多说了, 先记下来

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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
document.oncontextmenu = function (evt) {
evt = evt || window.event;
evt.returnValue = false;
}//屏蔽鼠标右键
document.onselectstart = function (evt) {
evt = evt || window.event;
evt.returnValue = false;
}//屏蔽鼠标选择
window.onhelp = function () {
return false;
} //屏蔽F1帮助
document.onmousewheel = function (evt)//屏蔽Shift+滚轮,Ctrl+滚轮
{
evt = evt || window.event;
if (evt.shiftKey || evt.ctrlKey) {
evt.keyCode = 0;
evt.returnValue = false;
}
}
document.onkeydown = function (evt) {
evt = evt || window.event;
if (evt.keyCode == 91) {
evt.keyCode = 0;
evt.returnValue = false;
}  //屏蔽Window左
if (evt.keyCode == 92) {
evt.keyCode = 0;
evt.returnValue = false;
}  //屏蔽Window右
if (evt.keyCode == 27) {
evt.keyCode = 0;
evt.returnValue = false;
}  //屏蔽ESC
if (evt.keyCode == 114) {
evt.keyCode = 0;
evt.returnValue = false;
}  //屏蔽F3
if (evt.keyCode == 116) {
evt.keyCode = 0;
evt.returnValue = false;
}  //屏蔽F5
if (evt.keyCode == 117) {
evt.keyCode = 0;
evt.returnValue = false;
}  //屏蔽F6
if (evt.keyCode == 118) {
evt.keyCode = 0;
evt.returnValue = false;
}  //屏蔽F7
if (evt.keyCode == 122) {
evt.keyCode = 0;
evt.returnValue = false;
}  //屏蔽F11
if (evt.keyCode == 123) {
evt.keyCode = 0;
evt.returnValue = false;
}  //屏蔽F12
if (evt.ctrlKey && evt.keyCode == 67) {
evt.keyCode = 0;
evt.returnValue = false;
} //屏蔽 Ctrl+c
if (evt.ctrlKey && evt.keyCode == 86) {
evt.keyCode = 0;
evt.returnValue = false;
} //屏蔽 Ctrl+v
if (evt.ctrlKey && evt.keyCode == 70) {
evt.keyCode = 0;
evt.returnValue = false;
} //屏蔽 Ctrl+f
if (evt.ctrlKey && evt.keyCode == 87) {
evt.keyCode = 0;
evt.returnValue = false;
} //屏蔽 Ctrl+w
if (evt.ctrlKey && evt.keyCode == 69) {
evt.keyCode = 0;
evt.returnValue = false;
} //屏蔽 Ctrl+e
if (evt.ctrlKey && evt.keyCode == 72) {
evt.keyCode = 0;
evt.returnValue = false;
} //屏蔽 Ctrl+h
if (evt.ctrlKey && evt.keyCode == 73) {
evt.keyCode = 0;
evt.returnValue = false;
} //屏蔽 Ctrl+i
if (evt.ctrlKey && evt.keyCode == 79) {
evt.keyCode = 0;
evt.returnValue = false;
} //屏蔽 Ctrl+o
if (evt.ctrlKey && evt.keyCode == 76) {
evt.keyCode = 0;
evt.returnValue = false;
} //屏蔽 Ctrl+l
if (evt.ctrlKey && evt.keyCode == 80) {
evt.keyCode = 0;
evt.returnValue = false;
} //屏蔽 Ctrl+p
if (evt.ctrlKey && evt.keyCode == 66) {
evt.keyCode = 0;
evt.returnValue = false;
} //屏蔽 Ctrl+b
if (evt.ctrlKey && evt.keyCode == 78) {
evt.keyCode = 0;
evt.returnValue = false;
}  //屏蔽 Ctrl+n
if (evt.shiftKey && evt.keyCode == 121) {
evt.keyCode = 0;
evt.returnValue = false;
}  //屏蔽 shift+F10
if (evt.srcElement.tagName == "A" && window.evt.shiftKey) {
evt.keyCode = 0;
evt.returnValue = false;
}             //屏蔽 shift 加鼠标左键新开一网页
}
 
document.onmousedown = function (evt) {
try {
evt = evt || window.event;
if (evt.button == 4) {
evt.keyCode = 0;
evt.returnValue = false;
} //屏蔽鼠标中键
} catch (e) {
}
}

 

如何快速的发布一个vue组件

2020-04-06admin阅读(1421)评论(0)

今天准备把我的一些常用组件发布到npm包里, 但是找了一圈资料都是特别繁琐的教程, 于是简单的研究了一下;

关于如何注册 https://www.npmjs.com/ 就不 多说了, 主要说说发布的事情;

首先看看 vue 的文档, 快速启动一个vue 服务;

https://cli.vuejs.org/zh/guide/prototyping.html#vue-serve

其实大概意思就是, 本地新建一个 xxx.vue, 然后直接把这个文件启动起来

比如我在本地新建一个 app.vue

app.vue 里面写正常 vue组件的内容

1
2
3
4
5
<template>
<div class="app">
  helo 天明
</div>
</template>

然后启动起来

1
vue serve app.vue

打开浏览器顺利看到内容, 如果这是我的一个组件的话, 那我再把组件导出,

为什么要走上面这几步呢, 是为了调试组件, 如果你很厉害, 组件不需要调试, 可以直接从下面开始~~~

根目录新建一个 index.js

导出组件, 类似于

1
2
3
4
5
6
7
8
9
10
11
12
/**
* Created by PhpStorm.
* User:  iyahe@qq.com (天明)
* Date: 2020/4/5
* Time: 21:58
* Description:
*/
module.exports = {
toAdd: require("./components/toAdd"),
tabar: require('./components/taBar'),
swiper: require('./components/swiper')
}

 

然后呢, 修改package.json 里面的  “private”:false,

大概是因为私有的npm不让发布;

其实这样, 我们就可以发布了,

发布流程和网上大家发的一样! 具体就不细写了

比如 npm login

然后

1
npm publish --access public

发布成功之后, 我们怎么使用呢?

1
import {toAdd} from '@tianmin/uniapp-modules'

这样就行了, 和使用本地组件一样!

这是我发布的一个测试组件: https://www.npmjs.com/package/@tianmin/uniapp-modules

这样看下来, 发布一个组件其实很简单!

 

新浪微博/QQ空间全景图exif信息修复及图片xmp元数据处理的一些事

2020-02-07admin阅读(3772)评论(0)

前段时间用无人机拍了一些全景图片准备发在微博, 毕竟我可是为数不多的新浪微博 全景达人 认证 / 哈哈哈.jpg

我的微博: 芊云全景

使用工具恢复数据之后我发出去的微博全景:  https://m.weibo.cn/z/panorama?oid=1042143:4469411109601303

后来才发现, 使用无人机合成的全景图片新浪微博无法识别, 而且QQ空间也无法识别, 当时我就猜测是因为 exif 信息被删掉导致的, 最近回京了., 疫情还是很严重, 在家办公有时间了, 就抽空做了一个小工具, 用来恢复 全景图丢失的图片 exif 数据!

https://vr.he29.com/v3/plugin/exif/.html

刚开始我的想法是, 使用 exif.js 来直接读取 图片的 exif 信息, 然后使用 piexif.js 直接写入, 然后保存, 都不经过服务端, 客户端网页直接处理完, 后来才发现不是这样!

普通图片的exif 信息可以这样恢复, 但是全景图片不行, 我来回对比, 几乎把 exif 所有信息全部恢复了, 微博也无法识别, 后来才发现, 全景图片的特殊性, 要操作图片元数据里面的 GPano 才可以,

而xmp元数据, 我使用js在客户端来回折腾也无法修改和恢复(技术太差);

而要识别为全景图, 只需要 在元数据里加入

<GPano:ProjectionType>equirectangular</GPano:ProjectionType>

<GPano:UsePanoramaViewer>True</GPano:UsePanoramaViewer>

就可以, 但是 客户端又无法操作, 所以只能通过cdn网络走服务端了!

于是先把图片上传到cdn, 然后通知php服务去操作 xmp 元数据, 操作完成之后, 为了速度更快, 又上传到cdn, 客户端再展示., 后来为了节省cdn资源, 又做了延迟队列, 10分钟之后删除图片等等,.

队列使用的是redis的订阅发布机制, 之前博文有写过: http://blog.he29.com/wblog/?p=1161

不过最终是完成了, 就是传输速度还是不快, 如果是超过5M的全景图, 则需要等待10s以上~~

芊云全景 PC 端也可以直接使用此工具了, 电脑端请直接打开: https://vr.he29.com/v3/tour/repair

 

不过, 目前网络上用来恢复全景图数据的插件很少, 我只看到一个使用.bat文件来恢复的脚本, 这个小工具应该可以帮助到不少的人!

 


扫描二维码用手机来试试看吧!

使用nodejs把vue编译的dist目录文件上传到阿里云的oss

2019-12-31admin阅读(2966)评论(0)

目前我的小程序 微云720在线全景 里面的资源都是在自己服务端,

因为服务端宽带是1M,总感觉速度不是很快,今天就抽时间写了个工具,把资源文件都上传到阿里云oss里面,增加访问速度!!!

基于阿里云的上传类ali-oss,

目前已经发布在 npm, 可以直接安装使用!

npm i webuposs –save

基本配置如下:

1
2
3
4
5
6
7
8
9
10
const rsync = require('webuposs');
const path = require("path");
new rsync({
region: 'oss-cn-beijing', //区域(EndPoint(地域节点), 例如: oss-cn-beijing.aliyuncs.com),
accessKeyId: '',
accessKeySecret: '',
bucket: '',
bucketDir: 'static/test', // 上传到阿里云oss之后的地址
localDir: path.join(__dirname,  'dist') // 本地地址
}).upload();

配置参数填写正确后, 启动文件, 将会把

当前目录 dist 下面的所有文件同步到 配置的 bucket, 目录是 bucketDir

例如以当前配置上传一个文件, 我的dist目录有一个xxx.js

上传之后,

我的访问地址是: 阿里云外网地址/static/test/xxx.js

微云全景在线体验地址: https://ar.he29.com/v2/tour/index?id=213

可以很明晰感觉到, 所有的资源加载时间都在100ms以内!!!

 

让你的webstorm/phpstorm 编辑器支持nodejs 代码提示

2019-12-24admin阅读(2201)评论(0)

一直在找怎么能让编辑器支持nodejs 的代码提示, 每次写代码都要查文档, 今天终于找到了方法!

1. 先安装typings这个包

npm install -g typings

输入 typings –version 出现版本号 说明安装成功

2.通过上面的命令,typings这个包就下载下来了,然后我们到项目开发目录,

打开终端,输入: typings init 这时当前目录下会出现一个typings.json的文件,这个文件就是typing的配置文件

这个文件类似packet.json, 然后我们安装

typings install dt~node –global–save

typings install dt~jquery –global –save

4-42

接下来之后就可以直接试试效果了!

终于不用脑补关键词了…

vue设置代理字段详解

2019-12-21admin阅读(3096)评论(0)

这里的vue代理是 vue静态服务器做代理。使用的是 http-proxy-middleware 这个模块(这个模块相当于是node.js的一个插件)。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
module.exports = {
  devServer: {
    proxy: {
      '/admin': {
        target: 'http://ar.he29.com/', //对应自己的接口
        changeOrigin: true,
        ws: true,
        secure: true, //如果是https接口,需要配置这个参数
        pathRewrite: {
          // '^/api': ''
        }
      }
    }
  }
}

 

我的 api=’/admin’
我的请求地址 ${api}/xxxx/xxx ,请求地址就为 ‘/admin/xxxx/xxx’
当node服务器 遇到 以 ‘/admin’ 开头的请求,就会把 target 字段加上,那么我的请求地址就为 http://ar.he29.com/admin/xxxx/xxx
下面的 pathRewrite 表示的意思是 把/api 替换为 空,那么我的请求地址就为 http://ar.he29.com/xxxx/xxx(用在如果你的实际请求地址没有 api 的情况)

phpstorm 配置实时编译js文件并且自动更新到服务器

2019-11-17admin阅读(1762)评论(0)

首选我们需要安装babel-cli

npm install –save-dev babel-cli

在根目录下创建一个.babelrc文件

1
2
3
4
5
{
  "presets": [
    "es2015"
  ]
}

安装babel的ES6的preset
npm install –save-dev babel-preset-es2015

添加一个File watcher
在Settings > Tools > File Watchers 添加Babel的watcher,记得前面要打对勾选中!
Program的设置为
$ProjectFileDir$\node_modules\.bin\babel.cmd
现在改变js文件的话应该就会默认在根目录底下创建出dist文件夹,转换好的js文件就会出现在里面啦!
如果报错的话可以将Arguments里的dev改成es2015,如下:
$FilePathRelativeToProjectRoot$ –out-dir dist –source-maps –presets es2015
这样是直接编译目录, 我需要编译单个文件:
配置应该是:
$FilePathRelativeToProjectRoot$ –out-file $FileDir$\$FileNameWithoutAllExtensions$.min.$FileExt$ –watch –presets es2015
但是这样的话, 我的最终编译文件也会被监控编译导致死循环,

因此需要这样设置(排除min.js文件)!

Snipaste_2019-11-17_23-34-04

然后就可以了!

编译结果:

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
26
27
28
29
30
31
32
33
34
35
"use strict";
 
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
 
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
 
/**
* Created by PhpStorm.
* User:  iyahe@qq.com (天明)
* Date: 2019/11/17
* Time: 22:01
* Description:
*/
var Upload = function () {
function Upload() {
_classCallCheck(this, Upload);
 
this.init = true;
this.init = true;
}
 
_createClass(Upload, [{
key: "start",
value: function start() {
window.console.log(123);
window.console.log(456);
window.console.log(78910);
window.console.log("hello");
}
}]);
 
return Upload;
}();
 
new Upload().start();

 

参考资料: 配置pm2,可用于多重编程语言, nodejs, php, python等等

2019-10-31admin阅读(2311)评论(0)

 

pm2命令使用(项目更目录下使用):

$ pm2 start app.js  启动app项目

$ pm2 list 列出由pm2管理的所有进程信息,还会显示一个进程会被启动多少次,因为没处理的异常。

$ pm2 monit 监视每个node进程的CPU和内存的使用情况

$ pm2 logs 显示所有进程日志

$ pm2 stop all 停止所有进程

$ pm2 restart all 重启所有进程

$ pm2 reload all 0秒停机重载进程 (用于 NETWORKED 进程)

$ pm2 stop 0 停止指定的进程

$ pm2 restart 0 重启指定的进程

$ pm2 startup 产生 init 脚本 保持进程活着

$ pm2 web 运行健壮的 computer API endpoint (http://localhost:9615)

$ pm2 delete 0 杀死指定的进程

$ pm2 delete all 杀死全部进程

 

启动进程的方式详细:

$ pm2 start app.js -i max 根据有效CPU数目启动最大进程数目

$ pm2 start app.js -i 3 启动3个进程

$ pm2 start app.js -x 用fork模式启动 app.js 而不是使用 cluster

$ pm2 start app.js -x -- -a 23 用fork模式启动 app.js 并且传递参数 (-a 23)

$ pm2 start app.js --name serverone 启动一个进程并把它命名为 serverone

$ pm2 stop serverone 停止 serverone 进程

$ pm2 start app.json 启动进程, 在 app.json里设置选项

$ pm2 start app.js -i max -- -a 23 在–之后给 app.js 传递参数

$ pm2 start app.js -i max -e err.log -o out.log 启动 并 生成一个配置文件

配置pm2启动文件:

可以通过pm2 start processes.json来启动。

在项目根目录下添加文件processes.json:

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
26
27
28
29
30
31
32
33
{
  "apps": [{
    "name": "mywork", // 应用程序名称
    "cwd": "/srv/node-app/current", //应用程序所在的目录
    "script": "tianming.js", //应用程序的脚本路径
    "log_date_format": "YYYY-MM-DD HH:mm:ss",
    "error_file": "log/stderr.log", // 自定义应用程序的错误日志文件
    "out_file": "log/stdout.log", // 自定义应用程序日志文件
    "pid_file": "pids/api.pid", // 自定义应用程序的pid文件
    "instances": 6, // 启动应用程序数目
    "min_uptime": "200s", // 最小运行时间,这里设置的是60s即如果应用程序在60s内退出,pm2会认为程序异常退出,此时触发重启max_restarts设置数量
    "max_restarts": 10, // :设置应用程序异常退出重启的次数,默认15次(从0开始计数)
    "max_memory_restart": "1M",
    "cron_restart": "1 0 * * *", // 定时启动,解决重启能解决的问题
    "watch": false, // 是否启用监控模式,默认是false。如果设置成true,当应用程序变动时,pm2会自动重载。这里也可以设置你要监控的文件。
    "merge_logs": true, // combine_logs的别名
    "exec_interpreter": "node", // 应用程序的脚本类型,这里使用的shell,默认是nodejs
    "exec_mode": "fork", // :应用程序启动模式,这里设置的是cluster_mode(集群),默认是fork
    "autorestart": false, //启用/禁用应用程序崩溃或退出时自动重启
    "vizion": false //启用/禁用vizion特性(版本控制)
    "env": {
      "NODE_ENV": "development", // 启动指定的环境:pm2 start app.js --env development
      "AWESOME_SERVICE_API_TOKEN": "xxx"
    },
    "env_production" : {
      "NODE_ENV": "production"
    },
    "env_staging" : {
      "NODE_ENV" : "staging",
      "TEST"     : true
    }
  }]
}

processes.json说明:

  • apps:json结构,apps是一个数组,每一个数组成员就是对应一个pm2中运行的应用
  • name:应用程序名称
  • cwd:应用程序所在的目录
  • script:应用程序的脚本路径
  • log_date_format:
  • error_file:自定义应用程序的错误日志文件
  • out_file:自定义应用程序日志文件
  • pid_file:自定义应用程序的pid文件
  • instances:
  • min_uptime:最小运行时间,这里设置的是60s即如果应用程序在60s内退出,pm2会认为程序异常退出,此时触发重启max_restarts设置数量
  • max_restarts:设置应用程序异常退出重启的次数,默认15次(从0开始计数)
  • cron_restart:定时启动,解决重启能解决的问题
  • watch:是否启用监控模式,默认是false。如果设置成true,当应用程序变动时,pm2会自动重载。这里也可以设置你要监控的文件。
  • merge_logs:
  • exec_interpreter:应用程序的脚本类型,这里使用的shell,默认是nodejs
  • exec_mode:应用程序启动模式,这里设置的是cluster_mode(集群),默认是fork
  • autorestart:启用/禁用应用程序崩溃或退出时自动重启
  • vizion:启用/禁用vizion特性(版本控制)

也可以把启动命令写在package.json里:

1
2
3
4
"scripts": {
"start": "node ./bin/xxx",
"pm2":"pm2 start processes.json"
},

微信图片_20190513113034

快速启动: pm2 start main.php –name worker –interpreter php — queue:work –daemon

参考文档: https://github.com/pm2-hive/pm2-hive.github.io/blob/master/docs/features/quick-start.md

chrome://inspect/#devices HTTP/1.1 404 Not Found 空白页

2019-10-25admin阅读(3759)评论(0)

修改网络连接,修改hosts文件。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
172.217.161.180 author-dot-betaspike.appspot.com
172.217.161.180 jmoore-dot-android-experiments.appspot.com
172.217.161.180 mission-author-dot-betaspike.appspot.com
172.217.161.180 drivenotepad.appspot.com
172.217.161.180 virustotalcloud.appspot.com
172.217.161.180 joinjoaomgcd.appspot.com
172.217.161.180 m-dot-betaspike.appspot.com
172.217.161.180 download-chromium.appspot.com
172.217.161.180 google-developers.appspot.com
172.217.161.180 chrometophone.appspot.com
172.217.161.180 chrome-devtools-frontend.appspot.com
172.217.161.180 apis-explorer.appspot.com
172.217.161.180 betaspike.appspot.com
172.217.161.180 hstspreload.appspot.com
172.217.161.180 lfe-alpo-gm.appspot.com
172.217.8.244 netlog-viewer.appspot.com
172.217.14.116 go-tour-zh.appspot.com

 

.editorconfig 文件解析

2019-10-14admin阅读(1476)评论(0)

在项目里,大多时候都能看到.editorconfig文件,刚开始总是忽视掉它,认为它不太重要。但是,它的存在,必定有它的理由,于是,抽空来研究一下,它是什么,能做什么。

官网是这么介绍EditorConfig的,“EditorConfig帮助开发人员在不同的编辑器和IDE之间定义和维护一致的编码样式。

EditorConfig项目由用于定义编码样式的文件格式和一组文本编辑器插件组成,这些插件使编辑器能够读取文件格式并遵循定义的样式。

EditorConfig文件易于阅读,并且与版本控制系统配合使用。” 不同的开发人员,不同的编辑器,有不同的编码风格,而EditorConfig就是用来协同团队开发人员之间的代码的风格及样式规范化的一个工具,而.editorconfig正是它的默认配置文件。

# 告诉EditorConfig插件,这是根文件,不用继续往上查找
root = true

# 匹配全部文件
[*]
# 结尾换行符,可选”lf”、”cr”、”crlf”
end_of_line = lf
# 在文件结尾插入新行
insert_final_newline = true
# 删除一行中的前后空格
trim_trailing_whitespace = true
# 匹配js和py结尾的文件
[*.{js,py}]
# 设置字符集
charset = utf-8

# 匹配py结尾的文件
[*.py]
# 缩进风格,可选”space”、”tab”
indent_style = space
# 缩进的空格数
indent_size = 4

# 以下匹配,类同
[Makefile]
indent_style = tab
# tab的宽度
tab_width = 4

# 以下匹配,类同
[lib/**.js]
indent_style = space
indent_size = 2

[{package.json,.travis.yml}]
indent_style = space
indent_size = 2

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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
root = true
[*]
charset=utf-8
end_of_line=crlf
trim_trailing_whitespace=true
insert_final_newline=true
indent_style=space
indent_size=2
 
[{*.ng,*.sht,*.html,*.shtm,*.shtml,*.htm,*.wxml}]
indent_style=space
tab_width=2
 
[{*.cql,*.ddl,*.sql}]
indent_style=space
indent_size=2
 
[*.less]
indent_style=space
indent_size=2
 
[*.sass]
indent_style=space
indent_size=2
 
[*.scss]
indent_style=space
indent_size=2
 
[{*.lbi,*.js}]
indent_style=tab
tab_width=2
 
[{*.phtml,*.module,*.php,*.php5,*.php4,*.hphp,*.inc}]
indent_style=space
tab_width=2
 
[{*.cjsx,*.coffee}]
indent_style=space
indent_size=2
 
[{*.wpy,*.vue}]
indent_style=tab
tab_width=2
 
[{*.yaml,*.yml}]
indent_style=space
indent_size=2

 

  • 上一页
  • 1
  • ···
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • ...
  • 下一页
  • 共 16 页
关于我

小天明 北京·朝阳 前端搬砖工程师

碎碎念):(来自公众号)

热门文章

  • 踩坑记录——iphone上safari开启隐身模式时localStorage变为只读-雅荷心语博客踩坑记录——iphone上safari开启隐身模式时localStorage变为只读2017-02-21评论(4)
  • 程序员是怎样一群人-雅荷心语博客程序员是怎样一群人2015-12-08评论(3)
  • 百度你个大毒瘤 - 吐糟博客这几天打不开事情-雅荷心语博客百度你个大毒瘤 – 吐糟博客这几天打不开事情2015-12-28评论(2)
  • PHP 非对称加密 openssl 加密及解密方法-雅荷心语博客PHP 非对称加密 openssl 加密及解密方法2016-05-17评论(2)
  • PHPStorm10 下载安装破解汉化-雅荷心语博客PHPStorm10 下载安装破解汉化2015-12-15评论(2)
2025年7月
一 二 三 四 五 六 日
« 六    
 123456
78910111213
14151617181920
21222324252627
28293031  

最新评论

  • 前端小武 8年前 (2017-04-06)说:
    我看到了layer
  • 丁艳平 8年前 (2017-03-03)说:
  • Dawn 9年前 (2016-09-16)说:
    call_user_func_array最后的例子是错哦,你用bc方法去调用类里 另外一个方法就知道问题所在了。情况1.调用非静态方法 第一个参数应该传[类的实例,调用方法] (既然有类实例了直接-&
  • Dawn 9年前 (2016-06-21)说:
    tp框架设置了全局捕获异常的,这也没什么。坑的是 他捕获了异常。然后全部返回404。。。不知道的 还以为自己网站被删除了
  • Dawn 9年前 (2016-05-17)说:
    构造函数里的判断 用异常机制可能更好一些

其他类型

  • 芊云全景
  • 配音兔AI配音神器

博客类型

  • 芊云全景
  • 配音兔AI配音神器

左邻右舍

  • 易水寒
  • 楼教主
  • 芊云全景
  • 贤心
  • 配音兔AI配音神器

雅荷心语博客 -心之所向便是光

联系我们关于我们

© 2025 雅荷心语博客   网站地图