mirror of
https://github.com/tailwindlabs/tailwindcss.git
synced 2025-12-08 21:36:08 +00:00
* add nesting plugin * rename @tailwindcss/nesting to tailwindcss/nesting * ignore the built `nesting` plugin * add a postcss7 compat version * include `nesting` plugin when publishing * add `build-plugins` script This will allow us to keep the plugins in their dedicated folders + tests + postcss7 compatibility files. However, when we copy over the plugins to the root. For example `plugins/nesting/` -> `nesting/` we skip files like `.test.js` and `.postcss7.js`. * build plugins when running `prepublishOnly` * improve compat mode We will use a glob so that we can move all *.postcss7.* files to just *.* likewise we will also backup to *.* to *.postcss8.* for restoring purposes. Concrete example: - Current state: - index.js // PostCSS 8 implementation - index.postcss7.js // PostCSS 7 implementation - Run "compat" - index.js // PostCSS 7 implementation - index.postcss7.js // PostCSS 7 implementation - index.postcss8.js // PostCSS 8 implementation (Backup of original) - Run "compat:restore" - index.js // PostCSS 8 implementation - index.postcss7.js // PostCSS 7 implementation - X index.postcss8.js // PostCSS 8 implementation (Removed) * Update README.md * ensure we `npm install` before publishing Co-authored-by: Adam Wathan <adam.wathan@gmail.com>
48 lines
1.2 KiB
JavaScript
48 lines
1.2 KiB
JavaScript
let fs = require('fs')
|
|
let path = require('path')
|
|
|
|
let plugins = fs.readdirSync(fromRootPath('plugins'))
|
|
|
|
for (let plugin of plugins) {
|
|
// Cleanup
|
|
let pluginDest = fromRootPath(plugin)
|
|
if (fs.existsSync(pluginDest)) {
|
|
fs.rmdirSync(pluginDest, { recursive: true })
|
|
}
|
|
|
|
// Copy plugin over
|
|
copyFolder(fromRootPath('plugins', plugin), pluginDest, (file) => {
|
|
// Ignore test files
|
|
if (file.endsWith('.test.js')) return false
|
|
// Ignore postcss7 files
|
|
if (file.endsWith('.postcss7.js')) return false
|
|
// Ignore postcss8 files
|
|
if (file.endsWith('.postcss8.js')) return false
|
|
|
|
return true
|
|
})
|
|
}
|
|
|
|
// ---
|
|
|
|
function fromRootPath(...paths) {
|
|
return path.resolve(process.cwd(), ...paths)
|
|
}
|
|
|
|
function copy(fromPath, toPath) {
|
|
fs.mkdirSync(path.dirname(toPath), { recursive: true }) // Ensure folder exists
|
|
fs.copyFileSync(fromPath, toPath)
|
|
}
|
|
|
|
function copyFolder(fromPath, toPath, shouldCopy = () => true) {
|
|
let stats = fs.statSync(fromPath)
|
|
if (stats.isDirectory()) {
|
|
let filesAndFolders = fs.readdirSync(fromPath)
|
|
for (let file of filesAndFolders) {
|
|
copyFolder(path.resolve(fromPath, file), path.resolve(toPath, file), shouldCopy)
|
|
}
|
|
} else if (shouldCopy(fromPath)) {
|
|
copy(fromPath, toPath)
|
|
}
|
|
}
|