diff --git a/README.md b/README.md index 7eb459489b00da833d97f0f8e1406fe069bdc87c..44d69e270d0124ec76d0bd10a69ea3b18016c921 100644 --- a/README.md +++ b/README.md @@ -12,9 +12,13 @@ 进入所在项目,全局搜索==.scss==。找到引用的==.scss==文件 4. 转scss文件为css -在src文件夹中放入需要转化scss的项目,执行==npm run dev==,命令完成后,css文件会出现在对应scss所在目录 +== 清空src文件夹的内容 ==,在src文件夹中放入需要转化scss的项目。执行==npm run dev==,命令完成后,css文件会出现在对应scss所在目录 5. 修改scss引入 进入第三步引用scss的文件,修改==.scss==后缀为==.css== -注:非vue项目,没有入口文件。因scss变量间的相互使用,在转化时可能会报错。修改文件此过程最后有前端协助处理,否则容易改错内容 \ No newline at end of file +6. 修改其他文件中包含的lang="scss" +修改html,vue,htmv等其他文件中包含的lang="scss"。执行node htmv,js 会直接替换文件中的scss,转化成css + +注:非vue项目,没有入口文件。因scss变量间的相互使用,在转化时可能会报错。修改文件此过程最好有前端协助处理,否则容易改错内容 + diff --git a/file.js b/file.js deleted file mode 100644 index b6aecbbfafa2c3e8916707c4dcdb3854bdbb8c22..0000000000000000000000000000000000000000 --- a/file.js +++ /dev/null @@ -1,71 +0,0 @@ -/** - * 读取一个目录中所有子目录和文件 - */ - const fs = require('fs') - const path = require('path') - - class File { - constructor(filename, name, ext, isFile, size, creeateTime, updateTime) { - this.filename = filename - this.name = name // 文件名 - this.ext = ext // 后缀 - this.isFile = isFile // 是否文件 - this.size = size // 文件大小 - this.creeateTime = creeateTime // 创建时间 - this.updateTime = updateTime // 更新时间 - } - - static async getFile(filename) { - const stat = await fs.promises.stat(filename) - const { size, birthtime, mtime } = stat - let name = path.basename(filename), - ext = path.extname(filename), - isFile = stat.isFile(), - creeateTime = new Date(birthtime), - updateTime = new Date(mtime); - return new File(filename, name, ext, isFile, size, creeateTime, updateTime) - } - - // 获取目录的所有子文件对象,如果是文件返回空数组 - async getChildren() { - if (this.isFile) { return [] } - let dirArr = await fs.promises.readdir(this.filename); - dirArr = dirArr.map(fileName => { - const filename = path.resolve(this.filename, fileName) - return File.getFile(filename) - }) - return Promise.all(dirArr) - } - - // 获取文件内容, 如果是目录,返回null - async getContent(isBuffer = false) { - if (!this.isFile) { return null } - if (isBuffer) { - return await fs.promises.readFile(this.filename) - } - return await fs.promises.readFile(this.filename, 'utf-8') - } - } - - async function readDir(dirname) { - const file = await File.getFile(dirname) - return await file.getChildren() - } - - const dirname = path.resolve(__dirname, '../src') - console.log(readDir(dirname)) - - async function test() { - const dirname = path.resolve(__dirname, '../src') - const filename = path.resolve(__dirname, './index.js') - - const dir = await File.getFile(dirname) - console.log('dir', await dir.getChildren()) - - const file = await File.getFile(filename) - console.log('file', file) - - } - test() - - \ No newline at end of file diff --git a/htmv.js b/htmv.js new file mode 100644 index 0000000000000000000000000000000000000000..9965b1bcdbf89c2ad3362b32c27ea2e9cc3d2fa5 --- /dev/null +++ b/htmv.js @@ -0,0 +1,65 @@ +const glob = require('glob'); +const path = require('path'); +const fs = require('fs'); +const cheerio = require('cheerio'); +const sass = require('sass'); + +const args = process.argv.slice(2); + +let partten = "**/*.htmv"; +if (args[1]) { + partten = args[1]; +} +let dirPath = args[0] || './src'; + +/** + * + * @param {String} dirPath + * @param {String} partten + */ +function dealVueStyleNode(dirPath, partten) { + const files = glob.globSync(partten, { cwd: dirPath }); + files.forEach(file => dealVueStyleNodeSingleFile(path.resolve(dirPath, file))); +} + +function dealVueStyleNodeSingleFile(file) { + const html = fs.readFileSync(file, 'utf-8'); + + // 使用 cheerio 加载 HTML 文档 + // 第三个参数表示不加载到document中 + const $ = cheerio.load(html, { + lowerCaseTags: false, + xmlMode: true, + normalizeWhitespace: false, + decodeEntities: false, + }, false); + + // 修改 HTML 文档中的内容 + $('style').each((index, styleEl) => { + styleEl = $(styleEl); + const lang = styleEl.attr('lang'); + if (!lang || lang == 'scss') { + const scssString = styleEl.text(); + try { + const result = parseScss(scssString, file); + styleEl.text(result.css); + console.log(`file: ${file} style-node: ${index} deal style success.`); + } catch (e) { + console.warn(`file: ${file} style-node: ${index} deal style error.`, e); + } + styleEl.attr('lang', 'css'); + } + }) + if ($('style').length) { + fs.writeFileSync(file, $.html()); + } + // // 将修改后的 HTML 文档写入文件 + // fs.writeFileSync('index.html', $.html()); +} + +function parseScss(scssString, file) { + const result = sass.compileString(scssString, { url: file }); + return result; +} + +dealVueStyleNode(dirPath, partten); diff --git a/package.json b/package.json index 2e71061a4ee99b179f8b4df5515f0c8881f117e7..168aa017c1d6d08a0013412d45b473c4ad7b7cb2 100644 --- a/package.json +++ b/package.json @@ -20,6 +20,9 @@ "license": "ISC", "dependencies": { "webpack-fix-style-only-entries": "^0.6.1", - "webpack-glob-entry": "^2.1.1" + "webpack-glob-entry": "^2.1.1", + "cheerio": "^1.0.0-rc.12", + "glob": "^9.0.2", + "sass": "^1.58.3" } } diff --git a/readFileCall.js b/readFileCall.js deleted file mode 100644 index ead20b5a0769033781b1cdcf922ac90907bff0c2..0000000000000000000000000000000000000000 --- a/readFileCall.js +++ /dev/null @@ -1,76 +0,0 @@ -/** - * 读取一个目录中所有子目录和文件 - */ - const fs = require('fs') - const path = require('path') - -var fileArr = [] - -var acceptFile = ['scss'] - -var getFile = function(pathStr,cb){ - fs.readdir(pathStr,function(err,dirArr){ - console.log(dirArr); - - dirArr.forEach(e => { - //文件夹 - let str = pathStr+'/'+e - if(!isFile(str)){ - getChildernFile(str) - }else{ - let fileType = str.split('.')[str.split('.').length-1] - if(acceptFile.indexOf(fileType)!==-1){ - fileArr.push({ - outputPath:pathStr+'/', - inputPath:str - }) - } - } - }); - - cb?cb():'' - }); - } - - var getChildernFile = function(pathStr){ - fs.readdir(pathStr,function(err,dirArr){ - console.log(dirArr); - - dirArr.forEach(e => { - //文件夹 - let str = pathStr+'/'+e - if(!isFile(str)){ - getFile(str) - }else{ - let fileType = str.split('.')[str.split('.').length-1] - if(acceptFile.indexOf(fileType)!==-1){ - fileArr.push({ - outputPath:pathStr+'/', - inputPath:str - }) - } - } - }); - }); - } - - - var isFile = function(filename){ - var stat = fs.lstatSync(filename); - var isFile = stat.isFile() - return isFile -} - -module.exports = { - getFile, - fileArr, -} - - -getFile('./src',function(){ - console.log(fileArr); -}) - -// setTimeout(()=>{ -// console.log(fileArr); -// },5000) \ No newline at end of file diff --git a/src/aa/bb/check-ukey-for-login.htmv b/src/aa/bb/check-ukey-for-login.htmv new file mode 100644 index 0000000000000000000000000000000000000000..1babb78b75aaec13b6a38907d9bfc6cd822052f2 --- /dev/null +++ b/src/aa/bb/check-ukey-for-login.htmv @@ -0,0 +1,342 @@ + + + + + + diff --git a/src/aa/check-ukey-for-login.htmv b/src/aa/check-ukey-for-login.htmv new file mode 100644 index 0000000000000000000000000000000000000000..1babb78b75aaec13b6a38907d9bfc6cd822052f2 --- /dev/null +++ b/src/aa/check-ukey-for-login.htmv @@ -0,0 +1,342 @@ + + + + + + diff --git a/src/check-ukey-for-login.htmv b/src/check-ukey-for-login.htmv new file mode 100644 index 0000000000000000000000000000000000000000..1babb78b75aaec13b6a38907d9bfc6cd822052f2 --- /dev/null +++ b/src/check-ukey-for-login.htmv @@ -0,0 +1,342 @@ + + + + + +