UNPKG

@weapp-tailwindcss/init

Version:
137 lines (136 loc) 5.83 kB
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;