UNPKG

@quick-game/cli

Version:

Command line interface for rapid qg development

146 lines (134 loc) 5.88 kB
"use strict";var _WeakMap = require("@babel/runtime-corejs2/core-js/weak-map");var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");var _Object$getOwnPropertyDescriptor = require("@babel/runtime-corejs2/core-js/object/get-own-property-descriptor");_Object$defineProperty(exports, "__esModule", { value: true });exports.default = prettierCode;var _manifest = require("../lib/manifest.js"); var paths = _interopRequireWildcard(require("../lib/paths")); var _index = require("../../cli-shared-utils/index.js");function _getRequireWildcardCache(e) {if ("function" != typeof _WeakMap) return null;var r = new _WeakMap(),t = new _WeakMap();return (_getRequireWildcardCache = function (e) {return e ? t : r;})(e);}function _interopRequireWildcard(e, r) {if (!r && e && e.__esModule) return e;if (null === e || "object" != typeof e && "function" != typeof e) return { default: e };var t = _getRequireWildcardCache(r);if (t && t.has(e)) return t.get(e);var n = { __proto__: null },a = _Object$defineProperty && _Object$getOwnPropertyDescriptor;for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) {var i = a ? _Object$getOwnPropertyDescriptor(e, u) : null;i && (i.get || i.set) ? _Object$defineProperty(n, u, i) : n[u] = e[u];}return n.default = e, t && t.set(e, n), n;} const prettier = require('prettier'); const fs = require('fs'); const path = require('path'); const babel = require('@babel/core'); // 使用babel & prettier处理代码 function prettierCode(dir) { // 默认Unity的文件以及laya的main文件进行处理,微小转换的文件进行处理 const manifest = (0, _manifest.get)(); let option = { include: /(engine\/js\/main\.js)|(wxapi-adapter\.js)|(unity_plugin(?:_\d+\.\d+\.\d+)?\.js)|(webgl\.wasm\.framework\.unityweb\.js)/ }; if (manifest.engine && manifest.engine.includes('wx') || manifest.isUnity) { option = { include: /\.js$/, exclude: { test: (filePath) => { return ( filePath.includes('node_modules') || filePath.includes('@babel') || filePath.includes('laya') || filePath.includes('webgl.framework.js') || filePath.includes('unionSdk') || filePath.includes('unityAdapter.js') || filePath.includes('qgame-adapter.js') || filePath.includes('store.js')); } } }; } const files = []; traverseDirSync(dir, files, option); for (const file of files) { // 文件大小超过5Mb不进行babel转换 const stats = fs.statSync(file); if (stats.size > 5 * 1024 * 1024) {// >5MB (0, _index.info)(`[babel-prettierCode] skip large file ${file.replace(paths.PROJECT_PATH, '')}`); continue; } // 统一使用babel-loader处理 babelCode(file, file); // // 统一使用prettier格式化 // const content = fs.readFileSync(file, { // encoding: 'utf-8' // }) // if (content) { // try { // const formattedCode = prettier.format(content, { // semi: true, // singleQuote: true, // parser: 'babel' // }) // fs.writeFileSync(file, formattedCode, 'utf8') // } catch (err) { // console.error(err) // } // } } } /** * 遍历目录文件 同步方法 * @param dir * @param files 收集的文件列表 */ const traverseDirSync = function (dir, files, options) { const st = fs.statSync(dir); if (st && st.isFile()) { const isExclude = options && options.exclude && options.exclude.test(dir.replace(/\\/g, '/')); if (!isExclude && options && options.include) { if (options.include.test(dir.replace(/\\/g, '/'))) { files.push(dir); } return; } return; } const list = fs.readdirSync(dir); list.forEach(function (file) { const isExclude = options && options.exclude && options.exclude.test(file.replace(/\\/g, '/')); if (!isExclude) { file = path.join(dir, file); const stat = fs.statSync(file); if (stat && stat.isDirectory()) { traverseDirSync(file, files, options); } else { if (options && options.include) { if (options.include.test(file.replace(/\\/g, '/'))) { files.push(file); } return; } files.push(file); } } }); }; function babelCode(filePath) { const code = fs.readFileSync(filePath, 'utf8'); try { // 检查代码中是否有严苛模式以及@babel/的标记,如果有则不进行babel转换 if (code.includes('use strict') && code.includes('@babel/')) { (0, _index.info)(`[babel] babel not effective, ${filePath.replace(paths.PROJECT_PATH, '')}`); return; } // 将文件缓存到build_temp目录下 if (filePath.startsWith(paths.PROJECT_PATH)) { const savePath = filePath.replace(paths.PROJECT_PATH, paths.BUILDTEMP); if (!fs.existsSync(path.dirname(savePath))) { fs.mkdirSync(path.dirname(savePath), { recursive: true }); } fs.writeFileSync(savePath, code); } const result = babel.transformSync(code, { filename: path.basename(filePath), cwd: __dirname, // 设置工作目录 presets: ['@babel/preset-env'], plugins: [ '@babel/plugin-transform-modules-commonjs', '@babel/plugin-transform-optional-chaining', '@babel/plugin-transform-nullish-coalescing-operator'], compact: false }); // babel将src下内容转换下,到dist下 if (!fs.existsSync(path.dirname(filePath))) { fs.mkdirSync(path.dirname(filePath), { recursive: true }); } fs.writeFileSync(filePath, result.code); (0, _index.info)(`[babel] success ${filePath.replace(paths.PROJECT_PATH, '')}`); } catch (e) { (0, _index.info)(`[babel] error ${filePath.replace(paths.PROJECT_PATH, '')}`); } }