当前位置: 首页 > news >正文

免费图片生成器浙江seo技术培训

免费图片生成器,浙江seo技术培训,电脑配件网站建设,吉安网站建设吉安pxToRem.js /*** 使用方式:* 与引入的文件放在同一目录下进行引用配置,执行:node (定义的文件)*/ const fs require(fs) const path require(path) /*** entry:入口文件路径 type:Strng* pxtopx:以倍数转…

pxToRem.js

/*** 使用方式:* 与引入的文件放在同一目录下进行引用配置,执行:node (定义的文件)*/
const fs = require('fs')
const path = require('path')
/*** entry:入口文件路径 type:Strng* pxtopx:以倍数转化px数值,计算方式为除法 ,type:Boolean* pxtorem:以倍数转化rem数值,计算方式为除法 ,type:Boolean* baseNumber:指定除数的基数,type:Number* includeFileTypeList:指定包含的文件类型后缀,type:Array* excludeFile:不包括的文件,可以是路径,type:Array*/
class pxToRemUtil {/*** @type {entry: String, pxtopx: boolean, pxtorem: boolean, baseNumber: number, includeFileTypeList: Array, excludeFile: Array}* @param {初始化参数} option*/constructor(option) {if (!option) {this._logError('请传入配置参数')process.exit(0)}if (!option.entry || !option.entry.trim()) {this._logError('未指定入口文件,请指定')process.exit(0)}if (!option.pxtopx && !option.pxtorem) {this._logError('未指定pxtopx或者pxtorem,检查配置')process.exit(0)}if (!option.baseNumber) {this._logError('未指定基数')process.exit(0)}if (option.pxtopx && option.pxtorem) {this._logError('未指定pxtopx或者pxtorem错误,检查配置')process.exit(0)}this._beginPath = option.entrythis._pxtopx = option.pxtopxthis._pxtorem = option.pxtoremif (this._pxtopx) this._unit = 'px'if (this._pxtorem) this._unit = 'rem'this.BASENUMBER = option.baseNumberthis._includeFileTypeList = option.includeFileTypeList || []this._excludeFile = option.excludeFile || []this._timer = nullthis._fileNumber = 0this._writeFileTimer = nullthis._arr = []this.getRegFile()this.sureHandler()}getRegFile() {let _strconnect = ''this._includeFileTypeList.forEach(item => {_strconnect += `(${item})$|`})_strconnect = _strconnect.length > 1 ? _strconnect.slice(0, _strconnect.length - 1) : ''_strconnect = this._includeFileTypeList.length > 0 ? '^.+' + _strconnect : ''this.regFile = new RegExp(_strconnect)}sureHandler() {process.stdin.setEncoding('utf8')process.stdout.write('此操作不可逆,确认是否进行(Y/n)?')process.stdin.on('data', input => {input = input.toString().trim()if (['Y', 'y', 'YES', 'yes'].indexOf(input) > -1 || !Boolean(input)) {this.fileDisplay(this._beginPath, this.changeFile.bind(this))}if (['N', 'n', 'NO', 'no'].indexOf(input) > -1) process.exit(0)})}fileDisplay(url, cb) {const filePath = path.resolve(url)fs.readdir(filePath, (err, files) => {if (err) return console.error('Error:(spec)', err)files.forEach(filename => {const filedir = path.join(filePath, filename)fs.stat(filedir, (eror, stats) => {if (eror) return console.error('Error:(spec)', err)const isFile = stats.isFile()const isDir = stats.isDirectory()if (isFile) {let exclude = this._excludeFile.some(item => {return filedir.includes(item)})let checkIsImage = filedir.match(/\.(png|jpg|gif|jpeg|webp|ttf|svg)$/)if (filedir.match(this.regFile) && !exclude && !checkIsImage) {this._arr.push({modified: false,path: filedir.replace(__dirname, '').replace(/\\/gim, '/'),})}if (this._timer) clearTimeout(this._timer)this._timer = setTimeout(() => cb && cb(this._arr), 200)}// 如果是文件夹if (isDir) this.fileDisplay(filedir, cb)})})})}changeFile() {/**重新写入文件 替换掉文件的px数值 */const self = thisthis._arr.forEach(item => {fs.readFile('.' + item.path, (err, data) => {let result = data.toString()var reg = /(\-|- |\+ )?([0-9]*\.[0-9]*|\d)+(px\)?)/gilet newStr = result.replace(reg, function (_x) {item.modified = truelet n = _x.search(/px\)/) >= 0 ? 'px\\)' : 'px'let reg = new RegExp(eval(`/(- |\\+ )+([0-9]*\\.[0-9]*|\\d)+${n}/gi`))if (_x.match(reg)) {let C = ''if (_x.search(/\+/) >= 0) {C = '+'} else if (_x.search(/\-/) >= 0) {C = '-'}if (_x.search(/px\)/)) _x = _x.replace(/(- |\+ )/, '').replace(/px/i, '')if (_x.search(/\)/) >= 0) return `${C} ` + parseFloat(_x) / self.BASENUMBER + `${self._unit})`if (!_x.search(/\)/) >= 0) return `${C} ` + parseFloat(_x) / self.BASENUMBER + `${self._unit}`}return parseFloat(_x) / self.BASENUMBER + `${self._unit}`})const opt = {flag: 'w',}if (newStr) {fs.writeFile('.' + item.path, newStr, opt, (err, success) => {if (this._writeFileTimer) clearTimeout(this._writeFileTimer)this._writeFileTimer = setTimeout(() => {this._logSuccess(self._fileNumber + ' 个文件写入成功')process.exit(0)}, 200)if (err) {this._logError(err)process.exit(0)} else {if (item.modified) {self._fileNumber++this._logSuccess('更改并写入:' + item.path.slice(1) + ' 成功')}}})}})})}_logSuccess(str) {console.log('\x1B[32m%s\x1B[39m', str)}_logError(str) {console.log('\x1B[31m%s\x1B[39m', str)}
}
module.exports = pxToRemUtil 

execFile.js

//将上面文件引入
let pxToRemUtil = require('./pxToRemUtil')/*** 接受的参数含义* entry:入口文件路径 type:Strng* pxtopx:以倍数转化px数值,计算方式为除法 ,type:Boolean* pxtorem:以倍数转化rem数值,计算方式为除法 ,type:Boolean* baseNumber:指定除数的基数,type:Number* includeFileTypeList:指定包含的文件类型后缀,type:Array* excludeFile:不包括的文件,可以是路径,type:Array*/
new pxToRemUtil({entry:'./',//需要修改的文件入口pxtorem:true,//设置为px转rembaseNumber:100,//将整体的数值除100,例如10px变成0.1remexcludeFile:[''],//可选值,排除的文件名includeFileTypeList:['.vue','.css']//可选值,包含改那些文件的后缀list
})

然后再控制台中执行:

node execFile.js

http://www.yayakq.cn/news/851686/

相关文章:

  • 昆明网站推广8888168微网站介绍
  • 带管理后台的网站湖南省建设安监局官网站
  • 搭建网站的步骤有哪些注册资本可以随便填吗
  • 网站由哪些部分组成部分组成部分网站建设中文百
  • 免费做那个的视频网站好已经有了域名怎么做网站
  • 凡科网站建设怎么样泉州哪个公司网站做的好
  • 策划会展网站建设做阿里云网站
  • 网站优化包括哪些内容网站建设市场
  • 昆明市城市基本建设档案馆网站自己做网站投放广告
  • eclipse tomcat 网站开发万能设计导航
  • 免费行情软件app网站大全下载有图片网站建设应具备哪些专业技能
  • 企业门户网站建设论文大学校园网络规划设计方案
  • 茶叶销售网站源代码wordpress上传文件显示
  • 江浙沪做网站的公司大型销售网站建设
  • 网站建设书籍 知乎门户类网站建设需要多少钱
  • 网站建设属于哪个税目6成都网站建设
  • 公司宣传网站建站做花馍网站
  • 云浮网站建设兼职eefocus电子工程网
  • 制作一个网站大概要多少钱新网站排名优化
  • 二手手表网站深圳设计公司 电话
  • 360浏览器免费网站网站优点介绍
  • 网站建设公司固定ip自助网站建设平台
  • 网站建设公司广告 晴天娃娃龙岗建站费用
  • 网站开发立项申请表网站关键词可以添加吗
  • 多用户旅游网站开发购买软件平台
  • 什么网站做软件任务挣钱中英文企业网站模板
  • 自己电脑做网站访问速度wordpress全站cdn ssl
  • 无锡谁会建商务网站做网页的软件下载
  • 网站建设干货图书网站建设商务
  • 文化馆网站建设如何设计大型电商网站建设