cli 文件名后缀判断

This commit is contained in:
Wang Kejun 2022-07-13 16:16:57 +08:00
parent 5a8fcccf9f
commit aa535ccd01
7 changed files with 149 additions and 12 deletions

View File

@ -0,0 +1,80 @@
const fs = require('fs');
const { relative } = require('path');
const t = require('@babel/types');
const pull = require('lodash/pull');
const { assert } = require('console');
const generate = require('@babel/generator').default;
const parser = require("@babel/parser");
const defaultOptions = {
baseDpr: 2, // base device pixel ratio (default: 2)
rpxUnit: 750, // rpx unit value (default: 750)
rpxPrecision: 6, // rpx value precision (default: 6)
forceRpxComment: 'rpx', // force px comment (default: `rpx`)
keepComment: 'no', // no transform value comment (default: `no`)
};
const rpxRegExp = /\b(\d+(\.\d+)?)rpx\b/;
module.exports = (babel) => {
return {
visitor: {
JSXAttribute(path, state) {
const { cwd, filename } = state;
if (
path.node &&
t.isJSXIdentifier(path.node.name) &&
path.node.name.name === 'style'
) {
const properties =
path.node.value &&
path.node.value.expression &&
path.node.value.expression.properties;
if (properties) {
properties.forEach((node2, index) => {
const { key, value } = node2;
const code = generate(value);
function getValue(val) {
return val == 0
? val
: `calc(100vw / ${defaultOptions.rpxUnit} * ${val})`;
}
const rpxGlobalRegExp = new RegExp(
rpxRegExp.source,
'g'
);
let codeStr = code.code;
if (rpxGlobalRegExp.test(codeStr)) {
codeStr = codeStr.replace(
rpxGlobalRegExp,
function ($0, $1) {
return getValue($1);
}
);
console.log('code2', codeStr);
const ast2 = parser.parse(
"30px",
{
sourceType: 'module',
plugins: ['jsx'],
}
);
console.log('ast2', JSON.stringify(ast2));
properties.splice(
index,
1,
t.objectProperty(key, value)
);
}
});
}
}
},
},
};
};

View File

@ -1,7 +1,17 @@
const { resolve, relative } = require('path'); const { resolve, relative } = require('path');
const rpxRegExp = /\b(\d+(\.\d+)?)rpx\b/;
module.exports = function (content) { const defaultOptions = {
/* const options = this.getOptions() || {}; //获取配置参数 baseDpr: 2, // base device pixel ratio (default: 2)
rpxUnit: 750, // rpx unit value (default: 750)
rpxPrecision: 6, // rpx value precision (default: 6)
forceRpxComment: 'rpx', // force px comment (default: `rpx`)
keepComment: 'no', // no transform value comment (default: `no`)
};
module.exports = function (source) {
const options = Object.assign(defaultOptions, this.getOptions()); //获取配置参数
/*
const { context: projectContext } = options; // context 本项目路径 const { context: projectContext } = options; // context 本项目路径
const { const {
options: webpackLegacyOptions, options: webpackLegacyOptions,
@ -15,9 +25,22 @@ module.exports = function (content) {
const issuerContext = (issuer && issuer.context) || context; const issuerContext = (issuer && issuer.context) || context;
const root = resolve(context, issuerContext); const root = resolve(context, issuerContext);
if (/.tsx|.jsx/.test(resourcePath)) { if (/.tsx|.jsx/.test(resourcePath)) {
// console.log(content); // console.log(source);
} */ } */
// const { rpxUnit } = options;
return content; // function getValue(val) {
// return val == 0 ? val : `calc(100vw / ${rpxUnit} * ${val})`;
// }
// const rpxGlobalRegExp = new RegExp(rpxRegExp.source, 'g');
// if (rpxGlobalRegExp.test(source)) {
// return source.replace(rpxGlobalRegExp, function ($0, $1) {
// return getValue($1);
// });
// }
return source;
}; };

View File

@ -11,14 +11,27 @@ const resolveApp = (relativePath) => path.resolve(resolveRoot(subDirName), relat
const buildPath = process.env.BUILD_PATH || 'dist'; const buildPath = process.env.BUILD_PATH || 'dist';
const moduleFileExtensions = [ let moduleFileExtensions = [
'mp.js', 'mp.js',
'js', 'js',
'mp.ts', 'mp.ts',
'ts', 'ts',
'json',
'wxs',
]; ];
if (process.env.NODE_ENV !== 'production') {
moduleFileExtensions = [
'dev.mp.js',
'dev.mp.ts',
'dev.js',
'dev.ts',
].concat(moduleFileExtensions);
} else {
moduleFileExtensions = [
'prod.mp.js',
'prod.mp.ts',
'prod.js',
'prod.ts',
].concat(moduleFileExtensions);
}
// Resolve file paths in the same order as webpack // Resolve file paths in the same order as webpack
const resolveModule = (resolveFn, filePath) => { const resolveModule = (resolveFn, filePath) => {

View File

@ -97,8 +97,8 @@ class Rpx2px {
return val == 0 ? val : `calc(100vw / ${rpxUnit} * ${val})`; return val == 0 ? val : `calc(100vw / ${rpxUnit} * ${val})`;
} }
return value.replace(rpxGlobalRegExp, function (ele1, ele2) { return value.replace(rpxGlobalRegExp, function ($0, $1) {
return type === 'rpx' ? ele2 : getValue(ele2); return type === 'rpx' ? $1 : getValue($1);
}); });
} }
} }

View File

@ -25,7 +25,7 @@ const publicUrlOrPath = getPublicUrlOrPath(
const buildPath = process.env.BUILD_PATH || 'build'; const buildPath = process.env.BUILD_PATH || 'build';
const moduleFileExtensions = [ let moduleFileExtensions = [
'web.mjs', 'web.mjs',
'mjs', 'mjs',
'web.js', 'web.js',
@ -34,10 +34,29 @@ const moduleFileExtensions = [
'ts', 'ts',
'web.tsx', 'web.tsx',
'tsx', 'tsx',
'json',
'web.jsx', 'web.jsx',
'jsx', 'jsx',
]; ];
if (process.env.NODE_ENV !== 'production') {
moduleFileExtensions = [
'dev.web.js',
'dev.web.ts',
'dev.web.tsx',
'dev.js',
'dev.ts',
'dev.tsx',
].concat(moduleFileExtensions);
}
else {
moduleFileExtensions = [
'prod.web.js',
'prod.web.ts',
'prod.web.tsx',
'prod.js',
'prod.ts',
'prod.tsx',
].concat(moduleFileExtensions);
}
// Resolve file paths in the same order as webpack // Resolve file paths in the same order as webpack
const resolveModule = (resolveFn, filePath) => { const resolveModule = (resolveFn, filePath) => {

View File

@ -31,7 +31,8 @@ const createEnvironmentHash = require('./webpack/persistentCache/createEnvironme
const oakPathTsxPlugin = require('../babel-plugin/oakPath'); const oakPathTsxPlugin = require('../babel-plugin/oakPath');
const oakRenderTsxPlugin = require('../babel-plugin/oakRender'); const oakRenderTsxPlugin = require('../babel-plugin/oakRender');
const oakRouterPlugin = require('../babel-plugin/router'); const oakRouterPlugin = require('../babel-plugin/router');
const oakRpxToPxPlugin = require('../babel-plugin/oakRpxToPx'); const oakStylePlugin = require('../babel-plugin/oakStyle');
const oakRpxToPxPlugin = require('../postcss-plugin/oakRpxToPx');
// Source maps are resource heavy and can cause out of memory issue for large source files. // Source maps are resource heavy and can cause out of memory issue for large source files.
const shouldUseSourceMap = process.env.GENERATE_SOURCEMAP !== 'false'; const shouldUseSourceMap = process.env.GENERATE_SOURCEMAP !== 'false';
@ -492,6 +493,7 @@ module.exports = function (webpackEnv) {
oakPathTsxPlugin, oakPathTsxPlugin,
oakRenderTsxPlugin, oakRenderTsxPlugin,
oakRouterPlugin, oakRouterPlugin,
// oakStylePlugin,
], ],
// This is a feature of `babel-loader` for webpack (not Babel itself). // This is a feature of `babel-loader` for webpack (not Babel itself).
// It enables caching results in ./node_modules/.cache/babel-loader/ // It enables caching results in ./node_modules/.cache/babel-loader/