@weapp-tailwindcss/init
Version:
@weapp-tailwindcss/init
137 lines (136 loc) • 5.83 kB
JavaScript
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
//#region \0rolldown/runtime.js
var __create = Object.create;
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __getProtoOf = Object.getPrototypeOf;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) {
key = keys[i];
if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
get: ((k) => from[k]).bind(null, key),
enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
});
}
return to;
};
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
value: mod,
enumerable: true
}) : target, mod));
//#endregion
let node_process = require("node:process");
node_process = __toESM(node_process);
let _weapp_tailwindcss_logger = require("@weapp-tailwindcss/logger");
let _weapp_tailwindcss_shared = require("@weapp-tailwindcss/shared");
let fs_extra = require("fs-extra");
fs_extra = __toESM(fs_extra);
let pathe = require("pathe");
pathe = __toESM(pathe);
//#region src/npm.ts
/**
* @example 'https://registry.npmjs.org'
* @example 'https://registry.npmmirror.com'
*/
function fetchPackage(packageName, options) {
const opts = (0, _weapp_tailwindcss_shared.defu)(options, { registry: "https://registry.npmmirror.com" });
return import("npm-registry-fetch").then(({ json }) => {
return json(`/${packageName}`, opts);
});
}
async function getLatestVersionInRange(packageName, versionRange, options) {
const response = await fetchPackage(packageName, options);
return Object.keys(response.versions).filter((version) => version.startsWith(versionRange)).at(-1);
}
const defaultDevDeps = {
"tailwindcss": "3",
"postcss": "8",
"autoprefixer": "10",
"weapp-tailwindcss": "3"
};
async function getDevDepsVersions(options) {
return Object.fromEntries(await Promise.all(Object.entries(defaultDevDeps).map(async (x) => {
return [x[0], `^${await getLatestVersionInRange(...x, options)}`];
})));
}
//#endregion
//#region src/index.ts
async function createContext(options) {
const { cwd, pkgJsonBasename, postcssConfigBasename, tailwindConfigBasename, fetchOptions } = options;
const pkgJsonPath = pathe.default.resolve(cwd, pkgJsonBasename);
if (await fs_extra.default.exists(pkgJsonPath)) {
const pkgJson = await fs_extra.default.readJson(pkgJsonPath);
return {
pkgJson,
pkgJsonPath,
cwd,
versions: await getDevDepsVersions(fetchOptions),
postcssConfigBasename,
tailwindConfigBasename,
get type() {
return pkgJson.type;
}
};
} else _weapp_tailwindcss_logger.logger.warn("当前目录下不存在 `package.json` 文件,初始化脚本将被跳过,请执行 `npm init` 或手动创建 `package.json` 后重试 ");
}
async function updatePackageJson(ctx) {
for (const [key, value] of Object.entries(ctx.versions)) (0, _weapp_tailwindcss_shared.setValue)(ctx.pkgJson, `devDependencies.${key}`, value);
await fs_extra.default.writeJSON(ctx.pkgJsonPath, ctx.pkgJson, { spaces: 2 });
}
async function touchPostcssConfig(ctx) {
const data = `${ctx.type === "module" ? "export default " : "module.exports = "}{
plugins: {
// Tailwind CSS 由 weapp-tailwindcss 生成模式接管,这里不要再注册 tailwindcss
// 假如框架已经内置了 \`autoprefixer\`,可以去除下一行
autoprefixer: {},
},
}
`;
await fs_extra.default.writeFile(pathe.default.resolve(ctx.cwd, ctx.postcssConfigBasename), data);
}
async function touchTailwindConfig(ctx) {
const data = `/** @type {import('tailwindcss').Config} */
${ctx.type === "module" ? "export default " : "module.exports = "}{
// 这里给出了一份 uni-app /taro 通用示例,具体要根据你自己项目的目录结构进行配置
// 不在 content 包括的文件内,你编写的 class,是不会生成对应的css工具类的
content: ['./public/index.html', './src/**/*.{wxml,html,js,ts,jsx,tsx,vue}'],
// 其他配置项
// ...
corePlugins: {
// 小程序不需要 preflight 和 container,因为这主要是给 h5 的,如果你要同时开发小程序和 h5 端,你应该使用环境变量来控制它
preflight: false,
container: false,
},
}
`;
await fs_extra.default.writeFile(pathe.default.resolve(ctx.cwd, ctx.tailwindConfigBasename), data);
}
function getInitDefaults() {
return {
cwd: node_process.default.cwd(),
postcssConfigBasename: "postcss.config.js",
tailwindConfigBasename: "tailwind.config.js",
pkgJsonBasename: "package.json"
};
}
async function init(options) {
const ctx = await createContext((0, _weapp_tailwindcss_shared.defu)(options, getInitDefaults()));
if (ctx) {
await updatePackageJson(ctx);
_weapp_tailwindcss_logger.logger.success("`package.json` 文件修改完成!");
await touchPostcssConfig(ctx);
_weapp_tailwindcss_logger.logger.success("`postcss.config.js` 文件创建完成!");
await touchTailwindConfig(ctx);
_weapp_tailwindcss_logger.logger.success("`tailwind.config.js` 文件创建完成!");
_weapp_tailwindcss_logger.logger.success("`weapp-tailwindcss` 初始化完成!请根据你自定义的需求,更改对应的配置文件(比如 `tailwind.config.js` 中的 `content` 配置)");
}
}
//#endregion
exports.createContext = createContext;
exports.getInitDefaults = getInitDefaults;
exports.init = init;
exports.touchPostcssConfig = touchPostcssConfig;
exports.touchTailwindConfig = touchTailwindConfig;
exports.updatePackageJson = updatePackageJson;