vite + vue3 多页面实战优化续集:eslint+lint-staged+husky+stylelint
vite + vue3 多页面实战优化续集:eslint+lint-staged+husky+stylelint
目的:项目投入使用发现很多使用起来不舒服的地方,进行优化
注意!!!:最新的一次创建项目运行时候以及配置eslint部分出现了许多问题
,可以结合最新的一篇vite+vue+ssg做官网 再记录一下项目创建结合起来查看是否有你遇到的问题
前提:在上一篇vite + vue3多页面配置记录references,loadEnv等中我详细记录了通过各种配置了解多页面项目。
结果:最终代码放到gitee这里的release分支vite-vue3-multip-release
之前配置不合理的地方:
为了让项目启动的时候自动打开html,修改了项目根目录到views下面root:'./src/views/'
,以至于outDir,windicss也要改。
所有生成的html全部扎堆生成在views下面,结构混乱
未配置eslint,保存自动格式化
未配置代码提交自动跑eslint检测。使用lint-staged + husky
未配置stylelint,规范css书写
未配置快速生成页面脚本:用plop搞个模版生成index.vue和main.ts,可以直接看代码库代码
项目到实践中肯定是不合理的,用起来不舒服。逐步解决上面的问题
第一步:不修改根目录路径;在根目录新建一个html文件夹,并将生成的html放到根目录统一管理,且要支持多级页面
通过上图目录结构可以看到,src/views
下面有多级页面,最后生成到src同级目录下的html文件夹中,且结构与之对应。这样看起来就很舒服,html文件夹中的东西根本不用动,通过脚本,每次dev的时候自动生成
我们看代码实现,主要还是去修改build/getPage.ts
, 利用mkdirp生成多级文件夹
import glob from 'glob'
import fs from 'fs'
import mkdirp from 'mkdirp'
import { resolve } from 'path'
const input = {}
const mainEntry = []
const iconDirs = []
function getPages () {
// 遍历文件夹中含有main.ts的文件夹路径
const allEntry = glob.sync('./src/views/**/main.ts')
// console.log(allEntry)
// console.log('allEntry', allEntry)
// 创建多页面模板
allEntry.forEach((entry: string) => {
const pathArr = entry.split('/')
const tsName = pathArr[pathArr.length - 2]
pathArr.pop()
const targetFilePath = pathArr.splice(3).join('/')
// 创建多级文件夹,去掉最后一个
const mkdirPath = targetFilePath.replace(`/${tsName}`, '')
const srcArr = entry.replace('./', '')
// console.log(targetFilePath, mkdirPath)
// 判断文件是否存在
try {
fs.accessSync(`./html/${targetFilePath}.html`)
} catch (err) {
if (targetFilePath.includes('/')) {
mkdirp(`./html/${mkdirPath}`).then(() => {
generete(targetFilePath, srcArr)
})
} else {
generete(targetFilePath, srcArr)
}
}
const svgPath = srcArr.split('/')
svgPath.splice(svgPath.length - 1, 1)
// input中的配置
input[targetFilePath] = resolve(`html/${targetFilePath}.html`)
// vconsole用
mainEntry.push(resolve(`${srcArr}`))
iconDirs.push(resolve(process.cwd(), `${svgPath.join('/')}/svg`))
})
};
function generete (targetFilePath, srcArr) {
// 获取模板
const temp = fs.readFileSync('./index.html')
// 多级相对路径
let relativeStr = ''
targetFilePath.split('/').forEach(() => {
relativeStr += '../'
})
console.log(`创建${targetFilePath}.html文件`)
const index = temp.toString().indexOf('
')
const content =
temp.toString().slice(0, index) +
`` +
temp.toString().slice(index)
fs.writeFile(`./html/${targetFilePath}.html`, content, err => {
if (err) console.log(err)
})
}
getPages()
// console.log(input, mainEntry, iconDirs)
export { input, mainEntry, iconDirs }
有了以上代码。每次运行都会根据入口main.ts,生成对应的html。但是启动项目怎么直接打开我想要的index.html呢?
server里面有配置,配置open即可。想到当时仅仅为了启动项目打开入口页面就更改root是多么的不理智了
// vite.config.ts
server: {
open: '/html/index.html',
proxy: {
'/api': {
target: 'https://app-api-0.com',
changeOrigin: true
}
}
},
第二步:配置eslint
这个就比较简单了,网上也有很多教程,当走到教程前面几步就可以了。我这里也记录一下
安装eslint npm i eslint -D
初始化配置:npx eslint --init
然后根据提示一步步操作 2.1 选择模式: (To check syntax and find problems) 我选第三个:To check syntax, find problems, and enforce code style
2.2 (选JavaScript modules): 选第一个:JavaScript modules (import/export)
2.3 选择语言框架 (选Vue.js) 2.4 是否使用ts : 我这里选yes 2.5 代码在哪里运行 (用空格选中 Browser+Node) 2.6 选择一个风格:我选的Standard, 完全就够用了 后面就是yes安装,会发现安装了这些插件
"eslint-config-standard": "^17.0.0",
"eslint-plugin-import": "^2.26.0",
"eslint-plugin-n": "^15.2.4",
"eslint-plugin-promise": "^6.0.0",
"eslint-plugin-vue": "^9.2.0",
"@typescript-eslint/eslint-plugin": "^5.30.7",
"@typescript-eslint/parser": "^5.30.7",
一些教程里面还单独安装@typescript-eslint/parser,我实践中走完上面就已经全部有了,生成的.eslintrc.js也不需要修改。
只是部分规则不适用vue3,我们可以在rules直接关掉即可:比如 vue/multi-word-component-names, no-irregular-whitespace
3.选择性安装vite-plugin-eslint
, 用于配置vite运行的时候自动检测eslint规范,使用npm run dev时会主动检查代码并报错
npm i -D vite-plugin-eslint
使用
import eslint from 'vite-plugin-eslint'
export default defineConfig({
plugins: [
vue(),
eslint()
]
})
setting.json 需要的内容
// setting.json
{
// 重新设定tabsize
"editor.tabSize": 2,
// 每次保存的时候自动格式化
"editor.formatOnSave": false,
"editor.codeActionsOnSave": {
"source.fixAll.eslint": true
}
}
这里提一嘴i18n-ally
多语言翻译这个vscode 插件,好用。
// setting.json中加入
{
"i18n-ally.localesPaths": ["src/views/login/lang"],
"i18n-ally.keystyle": "nested",
"i18n-ally.sortKeys": true,
// pathMatcher 必需开启namespace ,{locale}指的就是翻译文件名"i18n-ally.localesPaths",{ext}就是enabledParsers中的文件后缀
"i18n-ally.namespace": true,
"i18n-ally.pathMatcher": "{locale}/{namespaces}.{ext}",
"i18n-ally.enabledParsers": ["js", "json", "ts"],
"i18n-ally.sourceLanguage": "en",
"i18n-ally.displayLanguage": "zh", // 展示中文
"i18n-ally.enabledFrameworks": ["vue", "react"],
}
主要提这个i18n-ally.pathMatcher路径匹配,多份翻译文件,放在在同一个二级文件src/lang/en
,src/lang/zh
夹就能通过它namespaces匹配到且生效
第三步:配置lint-staged + husky。在git commit 的时候对提交文件进行校验
lint-staged工具对暂存的代码进行 lint,通常都是配配合husky使用. husky帮助你在git操作环节执行lint-staged,也就是里面的 eslint --fix
对暂存的src
下面的文件进行eslint校验。 一般我们会看到如下package.json配置
//package.json
{
"lint-staged": {
"src/**/*.{js,jsx,ts,tsx,vue}": [
"eslint --fix" // 仅仅校验修改暂存的文件
// "npm run lint:eslint". 如果要校验所有文件的也可以,除非你想这么做
]
}
}
//"scripts": {
//"lint:eslint": "eslint --cache --max-warnings 0 \"{src,mock}/**/*.{vue,ts,js,tsx}\" --fix",
// }
通过husky安装参考文档可以发现,安装husky有两种方式,结果是一样的
自动方式,只需要执行一句npx husky-init && npm install
npx husky-init && npm install # npm
npx husky-init && yarn # Yarn 1
yarn dlx husky-init --yarn2 && yarn # Yarn 2+
pnpm dlx husky-init && pnpm install # pnpm
执行完后会在package.json/scripts 自动加上"prepare": "husky install"
, 在根目录生成了一个.husky文件夹,里面有个_pre-commit
脚本文件
#!/usr/bin/env sh
. "$(dirname -- "$0")/_/husky.sh"
npm test
修改npm test
为自己的脚本命令,比如:npx lint-staged
这里的命令修改就可以自由发挥了,只要能触发package.json中的 lint-staged就成 比如我可以在这里写npm run lint:lint-staged
,那package.json/scripts中有对应的命令"lint:lint-staged": "lint-staged"
即可 tip:不走lint-staged,直接在这里写npm run lint:eslint
也是可以的(lint:eslint
是scripts中的eslint --fix命令)。说明仅仅只安装husky也是可以的,那也就是校验所有文件了。配合lint-staged只校验暂存区文件才是最好的
手动方式,按照顺序多执行几个命令
// 先安装
npm i husky -D.
// 先执行这句才能执行有第四句
npx husky install
// 在package.json/scripts 加上`"prepare": "husky install"`。自己手动去加也行
npm set-script prepare "husky install"
// 这句就是在`_pre-commit`脚本文件加上自己的命令啦
npx husky add .husky/pre-commit "npx lint-staged"
以上就能成功了。
第四步:配置stylelint
vscode 扩展必不可少:
通过stylelint官方文档我们先安装三个插件:我项目用的less,多来一个postcss-less
。如果你用scss,来一个postcss-scss
就好,下面配置一样的
npm i stylelint stylelint-config-standard postcss-less -D
新建文件.stylelintignore
/dist/*
/public/*
public/*
新建.stylelintrc.js
。stylelint默认只能识别css文件,我项目使用的less,上面安装一个postcss-less
,使用官网提到的自定义语法customSyntax参数让其能够识别less文件。 如果没有下面配置的overrides/customSyntax
,less文件中会有看不懂的报错:Unknown word (CssSyntaxError)Stylelint(CssSyntaxError)
// .stylelintrc.js
module.exports={
extends:["stylelint-config-standard",],
overrides:[
{
files:["**/*.less"],
customSyntax:"postcss-less"
}
]
}
有了上面的操作,已经能看到less文件中的样式各种红色提示了,还需要保存自动格式化,在.vscode/setting.json中增加下面的内容就可以了。
"editor.codeActionsOnSave": {
"source.fixAll.stylelint": true
}
项目是vue项目,vue文件中的样式无法识别,而且能看到输出的报错信息,提示我要postcss-html
,安装它
在.stylelintrc.js中加入它
module.exports={
extends:["stylelint-config-standard"],
customSyntax: "postcss-html",
overrides: [
{
files:["**/*.less"],
customSyntax:"postcss-less"
}
],
}
这时候你会发现vue文件中样式并没有提示问题。还差一步,在.vscode/settings.json
中增加
"stylelint.validate": ["vue", "less", "css"]
有了以上的简单配置,就可以保存自动按照stylelint格式化你的样式了
升级内容 (1)结合lint-staged,提交检测样式,在package.json中增加
"lint-staged": {
"**/*.{css,less,scss,vue}":[
"stylelint --fix"
]
}
(2)插件帮助我们css按照顺序书写
// 安装插件
npm i -D stylelint-order stylelint-config-rational-order
stylelint-config-rational-order
插件用来简化了插件stylelint-order
的引用和配置。你只用stylelint-order
也是可以的
//.stylelintrc.js 中使用插件
module.exports={
extends:["stylelint-config-standard", 'stylelint-config-rational-order'],
}
下面是一些问题记录
1. 当项目中使用了自动导入unplugin-auto-import/vite插件,eslint会提示ref等不存在
(1) 安装 vue-global-api
(2) 在eslintrc.js中加入它
extends: [
'plugin:vue/vue3-essential',
'standard',
'vue-global-api'
],
2. 记录一下cross-env,cross-env 使用单个命令,而不用担心环境变量的设置
安装
npm i cross-env -D
使用
"report": "cross-env REPORT=true npm run build",
取参数
const isReport = process.env.REPORT === 'true'
isReport
? visualizer({
//生成的stats放到别的地方去
filename: './node_modules/.cache/visualizer/stats.html',
open: true,
gzipSize: true,
brotliSize: true
})
: [],
3. 项目中加入一个插件后,在linux编译时莫名其妙报错:Error: The package "esbuild-linux-64" could not be found, and is needed by esbuild.
If you are installing esbuild with npm, make sure that you don't specify the "--no-optional" flag. The "optionalDependencies" package.json feature is used by esbuild to install the correct binary executable for your current platform.
按照道理说jenkins工作区域的node_modules早就有了,怎么突然没这个依赖了呢? 直接删除工作区域代码,重新npm i 跑一遍解决了
4. 该项目开发的多页面是给安卓app用的,用的lzyzsd/JsBridge。旧版app使用registerHandler提供native调用js的能力,在新版app失效,这个库issue里面也提到了
直接将js方法挂到window下面,native去调用
// 该方法给安卓调用,安卓返回是否开启消息提醒
window.getPunchInReminderStatus = (res) => {
systemRemindOpen = res === '1'
}
5. window.onresize不触发
旧版本安卓在进入页面或者失去焦点的时候会触发window.onresize,当时使用它时为了控制fixed元素不被键盘顶起来。 在新版安卓中,键盘并没有将底部fixed元素顶起来,且失去焦点的时候window.onresize不触发了,用不上它了
你可能感兴趣的:(vite + vue3 多页面实战优化续集:eslint+lint-staged+husky+stylelint)
斤斤计较的婚姻到底有多难?
白心之岂必有为
很多人私聊我会问到在哪个人群当中斤斤计较的人最多?我都会回答他,一般婚姻出现问题的斤斤计较的人士会非常多,以我多年经验,在婚姻落的一塌糊涂的人当中,斤斤计较的人数占比在20~30%以上,也就是说10个婚姻出现问题的斤斤计较的人有2-3个有多不减。在婚姻出问题当中,有大量的心理不平衡的、尖酸刻薄的怨妇。在婚姻中仅斤斤计较有两种类型:第一种是物质上的,另一种是精神上的。在物质与精神上抠门已经严重的影响
机器学习与深度学习间关系与区别
ℒℴѵℯ心·动ꦿ໊ོ꫞
人工智能 学习 深度学习 python
一、机器学习概述定义机器学习(MachineLearning,ML)是一种通过数据驱动的方法,利用统计学和计算算法来训练模型,使计算机能够从数据中学习并自动进行预测或决策。机器学习通过分析大量数据样本,识别其中的模式和规律,从而对新的数据进行判断。其核心在于通过训练过程,让模型不断优化和提升其预测准确性。主要类型1.监督学习(SupervisedLearning)监督学习是指在训练数据集中包含输入
OC语言多界面传值五大方式
Magnetic_h
ios ui 学习 objective-c 开发语言
前言在完成暑假仿写项目时,遇到了许多需要用到多界面传值的地方,这篇博客来总结一下比较常用的五种多界面传值的方式。属性传值属性传值一般用前一个界面向后一个界面传值,简单地说就是通过访问后一个视图控制器的属性来为它赋值,通过这个属性来做到从前一个界面向后一个界面传值。首先在后一个界面中定义属性@interfaceBViewController:UIViewController@propertyNSSt
element实现动态路由+面包屑
软件技术NINI
vue案例 vue.js 前端
el-breadcrumb是ElementUI组件库中的一个面包屑导航组件,它用于显示当前页面的路径,帮助用户快速理解和导航到应用的各个部分。在Vue.js项目中,如果你已经安装了ElementUI,就可以很方便地使用el-breadcrumb组件。以下是一个基本的使用示例:安装ElementUI(如果你还没有安装的话):你可以通过npm或yarn来安装ElementUI。bash复制代码npmi
绘本讲师训练营【24期】8/21阅读原创《独生小孩》
1784e22615e0
24016-孟娟《独生小孩》图片发自App今天我想分享一个蛮特别的绘本,讲的是一个特殊的群体,我也是属于这个群体,80后的独生小孩。这是一本中国绘本,作者郭婧,也是一个80厚。全书一百多页,均为铅笔绘制,虽然为黑白色调,但并不显得沉闷。全书没有文字,犹如“默片”,但并不影响读者对该作品的理解,反而显得神秘,梦幻,給读者留下想象的空间。作者在前蝴蝶页这样写到:“我更希望父母和孩子一起分享这本书,使他
我的烦恼
余建梅
我的烦恼。女儿问我:“你给学生布置什么作文题目?”“《我的烦恼》。”“他们都这么大了,你觉得他们还有烦恼吗?”“有啊!每个人都会有自己烦恼。”“我不相信,大人是没有烦恼的,如果说一定有的话,你的烦恼和我写作业有关,而且是小烦恼。不像我,天天被你说,有这样的妈妈,烦恼是没完没了。”女儿愤愤不平。每个人都会有自己的烦恼,处在上有老下有小的年纪,烦恼多的数不完。想干好工作带好孩子,想孝顺父母又想经营好自
Python数据分析与可视化实战指南
William数据分析
python python 数据
在数据驱动的时代,Python因其简洁的语法、强大的库生态系统以及活跃的社区,成为了数据分析与可视化的首选语言。本文将通过一个详细的案例,带领大家学习如何使用Python进行数据分析,并通过可视化来直观呈现分析结果。一、环境准备1.1安装必要库在开始数据分析和可视化之前,我们需要安装一些常用的库。主要包括pandas、numpy、matplotlib和seaborn等。这些库分别用于数据处理、数学
网易严选官方旗舰店,优质商品,卓越服务
高省_飞智666600
网易严选官方旗舰店是网易旗下的一家电商平台,以提供优质商品和卓越服务而闻名。作为一名SEO优化师,我将为您详细介绍网易严选官方旗舰店,并重点强调其特点和优势。大家好!我是高省APP最大团队&联合创始人飞智导师。相较于其他返利app,高省APP的佣金更高,模式更好,最重要的是,终端用户不会流失!高省APP佣金更高,模式更好,终端用户不流失。【高省】是一个自用省钱佣金高,分享推广赚钱多的平台,百度有几
Python教程:一文了解使用Python处理XPath
旦莫
Python进阶 python 开发语言
目录1.环境准备1.1安装lxml1.2验证安装2.XPath基础2.1什么是XPath?2.2XPath语法2.3示例XML文档3.使用lxml解析XML3.1解析XML文档3.2查看解析结果4.XPath查询4.1基本路径查询4.2使用属性查询4.3查询多个节点5.XPath的高级用法5.1使用逻辑运算符5.2使用函数6.实战案例6.1从网页抓取数据6.1.1安装Requests库6.1.2代
下载github patch到本地
小米人er
我的博客 git patch
以下是几种从GitHub上下载以.patch结尾的补丁文件的方法:通过浏览器直接下载打开包含该.patch文件的GitHub仓库。在仓库的文件列表中找到对应的.patch文件。点击该文件,浏览器会显示文件的内容,在页面的右上角通常会有一个“Raw”按钮,点击它可以获取原始文件内容。然后在浏览器中使用快捷键(如Ctrl+S或者Command+S)将原始文件保存到本地,选择保存的文件名并确保后缀为.p
基于社交网络算法优化的二维最大熵图像分割
智能算法研学社(Jack旭)
智能优化算法应用 图像分割 算法 php 开发语言
智能优化算法应用:基于社交网络优化的二维最大熵图像阈值分割-附代码文章目录智能优化算法应用:基于社交网络优化的二维最大熵图像阈值分割-附代码1.前言2.二维最大熵阈值分割原理3.基于社交网络优化的多阈值分割4.算法结果:5.参考文献:6.Matlab代码摘要:本文介绍基于最大熵的图像分割,并且应用社交网络算法进行阈值寻优。1.前言阅读此文章前,请阅读《图像分割:直方图区域划分及信息统计介绍》htt
从0到500+,我是如何利用自媒体赚钱?
一列脚印
运营公众号半个多月,从零基础的小白到现在慢慢懂了一些运营的知识。做好公众号是很不容易的,要做很多事情;排版、码字、引流…通通需要自己解决,业余时间全都花费在这上面涨这么多粉丝是真的不容易,对比知乎大佬来说,我们这种没资源,没人脉,还没钱的小透明来说,想要一个月涨粉上万,怕是今天没睡醒(不过你有的方法,算我piapia打脸)至少我是清醒的,自己慢慢努力,实现我的万粉目标!大家快来围观、支持我吧!孩子
有舍才有得
_清净_
为什么经常讲放下?放下就是让你要舍得、舍去。喜舍心就是把自己喜欢的,用慈悲心喜舍出去。这就锻炼了你们在人间,学会放下原本不舍得的东西或一些事物,学会舍出去,学会帮助别人,学会多付出。你今天付出了慈悲心、喜舍心,以后会得到更多的缘助力。缘助力是什么?——贵人缘啊。今天没有付出,不懂得付出,什么都只会想到自己,那你也得不到缘助力。慈悲喜舍就是用慈悲心去帮助别人,用喜舍心去付出,最后也会得到别人回报。别
【JS】执行时长(100分) |思路参考+代码解析(C++)
l939035548
JS 算法 数据结构 c++
题目为了充分发挥GPU算力,需要尽可能多的将任务交给GPU执行,现在有一个任务数组,数组元素表示在这1秒内新增的任务个数且每秒都有新增任务。假设GPU最多一次执行n个任务,一次执行耗时1秒,在保证GPU不空闲情况下,最少需要多长时间执行完成。题目输入第一个参数为GPU一次最多执行的任务个数,取值范围[1,10000]第二个参数为任务数组长度,取值范围[1,10000]第三个参数为任务数组,数字范围
2022-11-17
无奇君
又去了一次社康,这次是急性支气管炎……太难了。半夜就猛咳,天天咳醒,还好他戴海绵耳塞睡吵不到他,要不然对他来说也是种煎熬。一累也会猛咳,希望这次是最后一次吃药,吃完就好。又想把头发剪短了,顺便染个色。可是刚刚去看人家还没开门,不是休息日老板好佛系。理发店是个夫妻店,一年多前刚搬来的时候老板还没对象呢,当时聊天老板就说希望能找个对象一起两个人守着店都比上班强。不久后再去他已经有对象了,而且在店里帮忙
基于CODESYS的多轴运动控制程序框架:逻辑与运动控制分离,快速开发灵活操作
GPJnCrbBdl
python 开发语言
基于codesys开发的多轴运动控制程序框架,将逻辑与运动控制分离,将单轴控制封装成功能块,对该功能块的操作包含了所有的单轴控制(归零、点动、相对定位、绝对定位、设置当前位置、伺服模式切换等等)。程序框架由主程序按照状态调用分归零模式、手动模式、自动模式、故障模式,程序状态的跳转都已完成,只需要根据不同的工艺要求完成所需的动作即可。变量的声明、地址的规划都严格按照C++的标准定义,能帮助开发者快速
读《人间鲁迅》有感
琳语读书
上周读完《闻一多传》后,我对中国近代知识分子产生了兴趣,这周继续读了《人间鲁迅》。厚厚的两本书,记录了一个人的一生,苦痛,彷徨和挣扎,虽然只读了一小部分,却也心潮澎湃。闻一多和鲁迅是完全不同的。鲁迅是沉郁的,现实的,寂寞的,抗争的。除了天生性格的不同外,环境的塑造也是非常之大。鲁迅少年经历了家庭的变故,看尽了人间冷暖,世态炎凉。这种经历促使他很早就观察思考人生,立志用文学来改变中国国民的劣根。闻一
《Python数据分析实战终极指南》
xjt921122
python 数据分析 开发语言
对于分析师来说,大家在学习Python数据分析的路上,多多少少都遇到过很多大坑**,有关于技能和思维的**:Excel已经没办法处理现有的数据量了,应该学Python吗?找了一大堆Python和Pandas的资料来学习,为什么自己动手就懵了?跟着比赛类公开数据分析案例练了很久,为什么当自己面对数据需求还是只会数据处理而没有分析思路?学了对比、细分、聚类分析,也会用PEST、波特五力这类分析法,为啥
第九十章 真情
溪境
图片发自App图片发自App和雏田在一起的日子真的很开心。姐姐永远是最亲的最真的。佐助总来捣乱。小樱准备一盆水泼佐助。想到恋爱通告亦菲被泼水不免高兴。亦菲是最美的。没想到她也会有这种遭遇。也许不需要赚那么多钱。和家人在一起的日子真好。却轻易破碎。雏田的话语温软,依稀在耳边。她的微笑纯美温柔。喜欢温柔的哥哥,雏田就是这样啊。不知道雏田是喜欢男生还是女生。我都支持。过去门当户对。现在自由恋爱。想永远和
社保应该缴15年还是25年?那种方式最划算?
袋鼠观保保险规划师
社保无论是缴费15年还是25年,影响最大的就是养老保险和医疗保险,缴费时间越长越有利!1.养老保险真的交满15年就够了吗?要知道,社保缴费时长,直接影响到退休后能拿多少养老金,而且交得越久,退休领得越多。我拿深圳作为例子,想拿到养老金必须满足两个条件:只要达到一定的退休年龄,养老保险累计交满15年就可以拿到养老金了。那如果多缴了20年、25年甚至30年,是不是浪费了?实际上,缴满15年只是刚好可以
女儿考研完报考雅思
捡拾流年
是否我过于焦虑?会不会无形间让女儿觉得压力太大了啊。2022年对于我们家来说是不平常的一年。女儿今年大四,为了准备考研,暑假也没回家,年初去了学校到了年末才回家。女儿自己一个人面对考研,没有参加培训,大四学校作业论文等课业也多,她同时也是很努力复习考研的。在疫情开放很多羊的时期,女儿终于顺顺利利参加12月24、25号的考研,我们和家人都觉得女儿回家来要好好休息调养。可女儿回到家,我再查阅考研信息,
在一起的日子
少些期待
在一起已经三年多了,我是一个97年的摩羯座女生,他是一个89年的同样的摩羯座男生,刚开始是他追的我,我开始对他也挺有好感的,他从他朋友哪里,要到我的电话号,给我发信息,我没理他。然后我们的故事就这样开始了·····我不记得到底是什么,让我对他特别喜欢,想一心一意跟着他过日子,说白了我也就是个他的小跟班,又或者是个小跟屁虫,或者是个保姆,反正就是他在那里,我就得陪他到哪里,谈了半年多对象的时候,他因
关于Mysql 中 Row size too large (> 8126) 错误的解决和理解
秋刀prince
mysql mysql 数据库
提示:啰嗦一嘴,数据库的任何操作和验证前,一定要记得先备份!!!不会有错;文章目录问题发现一、问题导致的可能原因1、页大小2、行格式2.1compact格式2.2Redundant格式2.3Dynamic格式2.4Compressed格式3、BLOB和TEXT列二、解决办法1、修改页大小(不推荐)2、修改行格式3、修改数据类型为BLOB和TEXT列4、其他优化方式(可以参考使用)4.1合理设置数据
大雄的新恐龙:养育生命,的确不易
沧浪先生
哆啦A梦这个动画片,我小时候没有看过,长大了之后似乎对这种充满童真童趣的动画片也没有太多的喜爱,所以结果很明显,我并没有看过哆啦A梦这个动画片。但是近年来大屏幕的兴起,让各家影视剧制作者发现了电影化的好处,没错,电影不仅影响力更大,钱赚得也多。《哆啦A梦·大雄的新恐龙》是最新的一部大屏幕电影,大雄和柯南一样,都永远长不大,而且他和他的小伙伴日复一日、年复一年地和机器猫哆啦A梦在一起玩耍,永远的神奇
Python实现简单的机器学习算法
master_chenchengg
python python 办公效率 python开发 IT
Python实现简单的机器学习算法开篇:初探机器学习的奇妙之旅搭建环境:一切从安装开始必备工具箱第一步:安装Anaconda和JupyterNotebook小贴士:如何配置Python环境变量算法初体验:从零开始的Python机器学习线性回归:让数据说话数据准备:从哪里找数据编码实战:Python实现线性回归模型评估:如何判断模型好坏逻辑回归:从分类开始理论入门:什么是逻辑回归代码实现:使用skl
2020-8-19晨间日记:看过的电影
盐大虾
今天是周三起床:6点半就寝:11点天气:晴心情:正常纪念日:周三任务清单今日完成的任务,最重要的三件事:1.整理写过的文档2.电影《电灯泡》3.这就是街舞第三季第五期改进:早睡早起习惯养成:早睡早起,看书周目标·完成进度两篇文章学习·信息·阅读电影艺术发展史相关教材健康·饮食·锻炼吃了挺多零食,还喝了果粒橙,还是得少吃,多锻炼,不然会慢慢死掉的。人际·家人·朋友淡定交流,不放在心上。工作·思考专心
骑昆明到北海—119 砚山县
61清风i
从十年前第一次长途骑行青海湖开始每年一次长途骑行看风景,尝各地美食,探访异域文化,记录途中美食美景美事,已逐渐形成习惯。每年春季详细规划好线路,夏季出行,2020年因为疫情迟迟不能确定线路和行程。总算到了暑期疫情逐渐消失,规划了50多天的云南昆明—广西北海计划。本次行程从云南昆明出发到广西北海市结束,五十一天骑行二千多公里线路昆明-官渡古镇-环滇池--澄江市一抚仙湖—路居镇--江川区--通海县—龙
系统架构设计师 需求分析篇二
AmHardy
软件架构设计师 系统架构 需求分析 面向对象分析 分析模型 UML和SysML
面向对象分析方法1.用例模型构建用例模型一般需要经历4个阶段:识别参与者:识别与系统交互的所有事物。合并需求获得用例:将需求分配给予其相关的参与者。细化用例描述:详细描述每个用例的功能。调整用例模型:优化用例之间的关系和结构,前三个阶段是必需的。2.用例图的三元素参与者:使用系统的用户或其他外部系统和设备。用例:系统所提供的服务。通信关联:参与者和用例之间的关系,或用例与用例之间的关系。3.识别参
《前夫如龙》王昊江琼(独家小说)精彩TXT阅读
海边书楼
《前夫如龙》王昊江琼(独家小说)精彩TXT阅读主角:王昊江琼简介:离婚那天,她视他如泥土。谁曾想,消息一出,天下震动!可关注微信公众号【风车文楼】去回个书号【203】,即可免费阅读【前夫如龙】全文!江芸并未听出华少龙声音里的冷漠,依旧一脸笑容道:“是啊,那个废物哪儿配得上我姐?这些年,我姐对他仁至义尽了。以后,华少爷可以多跟我姐接触接触,只有华少爷这样的人,才配得上我姐啊!”江琼低着头,微微有些娇
我想把生活变成诗一般的日子
蜂蜜柚子也要加糖
图片发自App日子如水一般的平淡,心情没有一点波纹,我是那么的不擅长倾诉,可我又有那么多的情怀,我讨厌这个世界给予女子的按部就班,我不喜欢在适当的年龄必须做某些事情,我并不喜欢所谓的结婚生子,我就想安安静静地过好每一天。我不是别人眼中听话的孩子,我也不是别人口中优秀的孩子,我很普通,仅此而已,我不想麻烦任何人,我也不会给别人带去烦恼,我可能是习惯了了一个人,又或许是不习惯孤独,这是个矛盾的话题,习
多线程编程之join()方法
周凡杨
java JOIN 多线程 编程 线程
现实生活中,有些工作是需要团队中成员依次完成的,这就涉及到了一个顺序问题。现在有T1、T2、T3三个工人,如何保证T2在T1执行完后执行,T3在T2执行完后执行?问题分析:首先问题中有三个实体,T1、T2、T3, 因为是多线程编程,所以都要设计成线程类。关键是怎么保证线程能依次执行完呢?
Java实现过程如下:
public class T1 implements Runnabl
java中switch的使用
bingyingao
java enum break continue
java中的switch仅支持case条件仅支持int、enum两种类型。
用enum的时候,不能直接写下列形式。
switch (timeType) {
case ProdtransTimeTypeEnum.DAILY:
break;
default:
br
hive having count 不能去重
daizj
hive 去重 having count 计数
hive在使用having count()是,不支持去重计数
hive (default)> select imei from t_test_phonenum where ds=20150701 group by imei having count(distinct phone_num)>1 limit 10;
FAILED: SemanticExcep
WebSphere对JSP的缓存
周凡杨
WAS JSP 缓存
对于线网上的工程,更新JSP到WebSphere后,有时会出现修改的jsp没有起作用,特别是改变了某jsp的样式后,在页面中没看到效果,这主要就是由于websphere中缓存的缘故,这就要清除WebSphere中jsp缓存。要清除WebSphere中JSP的缓存,就要找到WAS安装后的根目录。
现服务
设计模式总结
朱辉辉33
java 设计模式
1.工厂模式
1.1 工厂方法模式 (由一个工厂类管理构造方法)
1.1.1普通工厂模式(一个工厂类中只有一个方法)
1.1.2多工厂模式(一个工厂类中有多个方法)
1.1.3静态工厂模式(将工厂类中的方法变成静态方法)
&n
实例:供应商管理报表需求调研报告
老A不折腾
finereport 报表系统 报表软件 信息化选型
引言
随着企业集团的生产规模扩张,为支撑全球供应链管理,对于供应商的管理和采购过程的监控已经不局限于简单的交付以及价格的管理,目前采购及供应商管理各个环节的操作分别在不同的系统下进行,而各个数据源都独立存在,无法提供统一的数据支持;因此,为了实现对于数据分析以提供采购决策,建立报表体系成为必须。 业务目标
1、通过报表为采购决策提供数据分析与支撑
2、对供应商进行综合评估以及管理,合理管理和
mysql
林鹤霄
转载源:http://blog.sina.com.cn/s/blog_4f925fc30100rx5l.html
mysql -uroot -p
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
[root@centos var]# service mysql
Linux下多线程堆栈查看工具(pstree、ps、pstack)
aigo
linux
原文:http://blog.csdn.net/yfkiss/article/details/6729364
1. pstree
pstree以树结构显示进程$ pstree -p work | grep adsshd(22669)---bash(22670)---ad_preprocess(4551)-+-{ad_preprocess}(4552) &n
html input与textarea 值改变事件
alxw4616
JavaScript
// 文本输入框(input) 文本域(textarea)值改变事件
// onpropertychange(IE) oninput(w3c)
$('input,textarea').on('propertychange input', function(event) {
console.log($(this).val())
});
String类的基本用法
百合不是茶
String
字符串的用法;
// 根据字节数组创建字符串
byte[] by = { 'a', 'b', 'c', 'd' };
String newByteString = new String(by);
1,length() 获取字符串的长度
&nbs
JDK1.5 Semaphore实例
bijian1013
java thread java多线程 Semaphore
Semaphore类
一个计数信号量。从概念上讲,信号量维护了一个许可集合。如有必要,在许可可用前会阻塞每一个 acquire(),然后再获取该许可。每个 release() 添加一个许可,从而可能释放一个正在阻塞的获取者。但是,不使用实际的许可对象,Semaphore 只对可用许可的号码进行计数,并采取相应的行动。
S
使用GZip来压缩传输量
bijian1013
java GZip
启动GZip压缩要用到一个开源的Filter:PJL Compressing Filter。这个Filter自1.5.0开始该工程开始构建于JDK5.0,因此在JDK1.4环境下只能使用1.4.6。
PJL Compressi
【Java范型三】Java范型详解之范型类型通配符
bit1129
java
定义如下一个简单的范型类,
package com.tom.lang.generics;
public class Generics<T> {
private T value;
public Generics(T value) {
this.value = value;
}
}
【Hadoop十二】HDFS常用命令
bit1129
hadoop
1. 修改日志文件查看器
hdfs oev -i edits_0000000000000000081-0000000000000000089 -o edits.xml
cat edits.xml
修改日志文件转储为xml格式的edits.xml文件,其中每条RECORD就是一个操作事务日志
2. fsimage查看HDFS中的块信息等
&nb
怎样区别nginx中rewrite时break和last
ronin47
在使用nginx配置rewrite中经常会遇到有的地方用last并不能工作,换成break就可以,其中的原理是对于根目录的理解有所区别,按我的测试结果大致是这样的。
location /
{
proxy_pass http://test;
java-21.中兴面试题 输入两个整数 n 和 m ,从数列 1 , 2 , 3.......n 中随意取几个数 , 使其和等于 m
bylijinnan
java
import java.util.ArrayList;
import java.util.List;
import java.util.Stack;
public class CombinationToSum {
/*
第21 题
2010 年中兴面试题
编程求解:
输入两个整数 n 和 m ,从数列 1 , 2 , 3.......n 中随意取几个数 ,
使其和等
eclipse svn 帐号密码修改问题
开窍的石头
eclipse SVN svn帐号密码修改
问题描述:
Eclipse的SVN插件Subclipse做得很好,在svn操作方面提供了很强大丰富的功能。但到目前为止,该插件对svn用户的概念极为淡薄,不但不能方便地切换用户,而且一旦用户的帐号、密码保存之后,就无法再变更了。
解决思路:
删除subclipse记录的帐号、密码信息,重新输入
[电子商务]传统商务活动与互联网的结合
comsci
电子商务
某一个传统名牌产品,过去销售的地点就在某些特定的地区和阶层,现在进入互联网之后,用户的数量群突然扩大了无数倍,但是,这种产品潜在的劣势也被放大了无数倍,这种销售利润与经营风险同步放大的效应,在最近几年将会频繁出现。。。。
如何避免销售量和利润率增加的
java 解析 properties-使用 Properties-可以指定配置文件路径
cuityang
java properties
#mq
xdr.mq.url=tcp://192.168.100.15:61618;
import java.io.IOException;
import java.util.Properties;
public class Test {
String conf = "log4j.properties";
private static final
Java核心问题集锦
darrenzhu
java 基础 核心 难点
注意,这里的参考文章基本来自Effective Java和jdk源码
1)ConcurrentModificationException
当你用for each遍历一个list时,如果你在循环主体代码中修改list中的元素,将会得到这个Exception,解决的办法是:
1)用listIterator, 它支持在遍历的过程中修改元素,
2)不用listIterator, new一个
1分钟学会Markdown语法
dcj3sjt126com
markdown
markdown 简明语法 基本符号
*,-,+ 3个符号效果都一样,这3个符号被称为 Markdown符号
空白行表示另起一个段落
`是表示inline代码,tab是用来标记 代码段,分别对应html的code,pre标签
换行
单一段落( <p>) 用一个空白行
连续两个空格 会变成一个 <br>
连续3个符号,然后是空行
Gson使用二(GsonBuilder)
eksliang
json gson GsonBuilder
转载请出自出处:http://eksliang.iteye.com/blog/2175473 一.概述
GsonBuilder用来定制java跟json之间的转换格式
二.基本使用
实体测试类:
温馨提示:默认情况下@Expose注解是不起作用的,除非你用GsonBuilder创建Gson的时候调用了GsonBuilder.excludeField
报ClassNotFoundException: Didn't find class "...Activity" on path: DexPathList
gundumw100
android
有一个工程,本来运行是正常的,我想把它移植到另一台PC上,结果报:
java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.mobovip.bgr/com.mobovip.bgr.MainActivity}: java.lang.ClassNotFoundException: Didn't f
JavaWeb之JSP指令
ihuning
javaweb
要点
JSP指令简介
page指令
include指令
JSP指令简介
JSP指令(directive)是为JSP引擎而设计的,它们并不直接产生任何可见输出,而只是告诉引擎如何处理JSP页面中的其余部分。
JSP指令的基本语法格式:
<%@ 指令 属性名="
mac上编译FFmpeg跑ios
啸笑天
ffmpeg
1、下载文件:https://github.com/libav/gas-preprocessor, 复制gas-preprocessor.pl到/usr/local/bin/下, 修改文件权限:chmod 777 /usr/local/bin/gas-preprocessor.pl
2、安装yasm-1.2.0
curl http://www.tortall.net/projects/yasm
sql mysql oracle中字符串连接
macroli
oracle sql mysql SQL Server
有的时候,我们有需要将由不同栏位获得的资料串连在一起。每一种资料库都有提供方法来达到这个目的:
MySQL: CONCAT()
Oracle: CONCAT(), ||
SQL Server: +
CONCAT() 的语法如下:
Mysql 中 CONCAT(字串1, 字串2, 字串3, ...): 将字串1、字串2、字串3,等字串连在一起。
请注意,Oracle的CON
Git fatal: unab SSL certificate problem: unable to get local issuer ce rtificate
qiaolevip
学习永无止境 每天进步一点点 git 纵观千象
// 报错如下:
$ git pull origin master
fatal: unable to access 'https://git.xxx.com/': SSL certificate problem: unable to get local issuer ce
rtificate
// 原因:
由于git最新版默认使用ssl安全验证,但是我们是使用的git未设
windows命令行设置wifi
surfingll
windows wifi 笔记本wifi
还没有讨厌无线wifi的无尽广告么,还在耐心等待它慢慢启动么
教你命令行设置 笔记本电脑wifi:
1、开启wifi命令
netsh wlan set hostednetwork mode=allow ssid=surf8 key=bb123456
netsh wlan start hostednetwork
pause
其中pause是等待输入,可以去掉
2、
Linux(Ubuntu)下安装sysv-rc-conf
wmlJava
linux ubuntu sysv-rc-conf
安装:sudo apt-get install sysv-rc-conf 使用:sudo sysv-rc-conf
操作界面十分简洁,你可以用鼠标点击,也可以用键盘方向键定位,用空格键选择,用Ctrl+N翻下一页,用Ctrl+P翻上一页,用Q退出。
背景知识
sysv-rc-conf是一个强大的服务管理程序,群众的意见是sysv-rc-conf比chkconf
svn切换环境,重发布应用多了javaee标签前缀
zengshaotao
javaee
更换了开发环境,从杭州,改变到了上海。svn的地址肯定要切换的,切换之前需要将原svn自带的.svn文件信息删除,可手动删除,也可通过废弃原来的svn位置提示删除.svn时删除。
然后就是按照最新的svn地址和规范建立相关的目录信息,再将原来的纯代码信息上传到新的环境。然后再重新检出,这样每次修改后就可以看到哪些文件被修改过,这对于增量发布的规范特别有用。
检出