No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 186 additions and 19 deletions
-
26.prettierignore
-
2CHANGELOG.md
-
20src/commands/add/prettier.ts
-
136src/commands/add/tailwind.ts
-
5src/commands/wall/index.ts
-
16src/utls/base-add-command.ts
@ -0,0 +1,26 @@ |
|||||
|
.DS_Store |
||||
|
node_modules |
||||
|
/dist |
||||
|
babel.config.js |
||||
|
|
||||
|
# local env files |
||||
|
.env.local |
||||
|
.env.*.local |
||||
|
|
||||
|
# Log files |
||||
|
npm-debug.log* |
||||
|
yarn-debug.log* |
||||
|
yarn-error.log* |
||||
|
|
||||
|
# Editor directories and files |
||||
|
.idea |
||||
|
*.iml |
||||
|
.vscode |
||||
|
*.suo |
||||
|
*.ntvs* |
||||
|
*.njsproj |
||||
|
*.sln |
||||
|
*.sw? |
||||
|
.history |
||||
|
|
||||
|
CHANGELOG.md |
||||
@ -0,0 +1,136 @@ |
|||||
|
import { BaseCommand } from '../../utls/base-command'; |
||||
|
import { system, filesystem, patching } from 'gluegun'; |
||||
|
import * as prompts from 'prompts'; |
||||
|
import * as fs from 'fs'; |
||||
|
import { plugins, add, commit } from 'isomorphic-git'; |
||||
|
import { BaseAddCommand } from '../../utls/base-add-command'; |
||||
|
|
||||
|
plugins.set('fs', fs); |
||||
|
|
||||
|
export default class Prettier extends BaseAddCommand { |
||||
|
static description = 'add tailwindcss to a project'; |
||||
|
|
||||
|
static flags = { |
||||
|
...BaseCommand.flags, |
||||
|
}; |
||||
|
|
||||
|
async run() { |
||||
|
if (!this.hasDirPackageJson()) { |
||||
|
this.error('There is no package.json not found in the current folder'); |
||||
|
} |
||||
|
|
||||
|
if (!this.hasDependencyInPackageJson('react-scripts')) { |
||||
|
this.error('This script support only for now create react apps.'); |
||||
|
} |
||||
|
|
||||
|
const { shouldCommit } = await prompts( |
||||
|
[ |
||||
|
{ |
||||
|
type: 'confirm', |
||||
|
message: 'Do you want gitmoji commits with the prettier setup ?', |
||||
|
name: 'shouldCommit', |
||||
|
initial: true, |
||||
|
}, |
||||
|
], |
||||
|
{ onCancel: () => this.error('User canceled prompt.') }, |
||||
|
); |
||||
|
|
||||
|
if (shouldCommit) { |
||||
|
this.initGit(); |
||||
|
} |
||||
|
|
||||
|
await this.installForCreateReactApps(shouldCommit); |
||||
|
} |
||||
|
|
||||
|
async installForCreateReactApps(shouldCommit: boolean): Promise<void> { |
||||
|
await this.addDevDependency('@fullhuman/postcss-purgecss', shouldCommit); |
||||
|
await this.addDevDependency('autoprefixer', shouldCommit); |
||||
|
await this.addDevDependency('npm-run-all', shouldCommit); |
||||
|
await this.addDevDependency('postcss-cli', shouldCommit); |
||||
|
await this.addDependency('tailwindcss', shouldCommit); |
||||
|
|
||||
|
await this.runWithSpinner('Generating tailwind initial config', async () => { |
||||
|
await system.exec('yarn tailwindcss init --full'); |
||||
|
|
||||
|
if (shouldCommit) { |
||||
|
await add({ filepath: 'tailwind.config.js', dir: '.' }); |
||||
|
await commit({ dir: '.', message: ':wrench: add tailwind config file' }); |
||||
|
} |
||||
|
}); |
||||
|
await this.runWithSpinner('Generating postcss', async () => { |
||||
|
await filesystem.write( |
||||
|
'postcss.config.js', |
||||
|
`const purgecss = require('@fullhuman/postcss-purgecss')({
|
||||
|
content: ['./src/**/*.jsx', './src/**/*.js', './src/index.js', './public/index.html'], |
||||
|
css: ['./src/tailwind.css'], |
||||
|
// Include any special characters you're using in this regular expression
|
||||
|
defaultExtractor: content => content.match(/[A-Za-z0-9-_:/]+/g) || [], |
||||
|
}); |
||||
|
module.exports = { |
||||
|
plugins: [ |
||||
|
require('tailwindcss')('./tailwind.config.js'), |
||||
|
require('autoprefixer'), |
||||
|
...(process.env.NODE_ENV === 'production' ? [purgecss] : []), |
||||
|
], |
||||
|
}; |
||||
|
`,
|
||||
|
); |
||||
|
|
||||
|
if (shouldCommit) { |
||||
|
await add({ filepath: 'postcss.config.js', dir: '.' }); |
||||
|
await commit({ dir: '.', message: ':wrench: add postcss config file' }); |
||||
|
} |
||||
|
}); |
||||
|
|
||||
|
await this.runWithSpinner('Generating tailwind full css', async () => { |
||||
|
await filesystem.dir('src/css'); |
||||
|
await filesystem.write( |
||||
|
'src/css/tailwind.src.css', |
||||
|
`@tailwind base;
|
||||
|
|
||||
|
@tailwind components; |
||||
|
|
||||
|
@tailwind utilities; |
||||
|
`,
|
||||
|
); |
||||
|
|
||||
|
if (shouldCommit) { |
||||
|
await add({ filepath: 'src/css/tailwind.src.css', dir: '.' }); |
||||
|
await commit({ dir: '.', message: ':wrench: add tailwind css file' }); |
||||
|
} |
||||
|
}); |
||||
|
|
||||
|
await this.runWithSpinner('Adding package.json scripts', async () => { |
||||
|
const packagePath = filesystem.path('.', 'package.json'); |
||||
|
const packageJsonWithDeps = filesystem.read(packagePath, 'json'); |
||||
|
const finalPackageJson = { |
||||
|
...packageJsonWithDeps, |
||||
|
scripts: { |
||||
|
...packageJsonWithDeps.scripts, |
||||
|
'start': 'npm-run-all -p start:css start:js', |
||||
|
'build': 'npm-run-all build:css build:js', |
||||
|
'start:js': 'react-scripts start', |
||||
|
'build:js': 'react-scripts build', |
||||
|
'start:css': 'postcss src/css/tailwind.src.css -o src/tailwind.css -w', |
||||
|
'build:css': 'postcss src/css/tailwind.src.css -o src/tailwind.css --env production', |
||||
|
}, |
||||
|
}; |
||||
|
|
||||
|
await filesystem.write(packagePath, finalPackageJson, { jsonIndent: 2 }); |
||||
|
|
||||
|
if (shouldCommit) { |
||||
|
await add({ filepath: 'package.json', dir: '.' }); |
||||
|
await commit({ dir: '.', message: ':wrench: add script for tailwind to package.json' }); |
||||
|
} |
||||
|
}); |
||||
|
|
||||
|
await this.runWithSpinner('Adding full tailwind css to .gitignore', async () => { |
||||
|
await patching.append('.gitignore', '\n# ignore tailwind generated css\nsrc/tailwind.css'); |
||||
|
|
||||
|
if (shouldCommit) { |
||||
|
await add({ filepath: '.gitignore', dir: '.' }); |
||||
|
await commit({ dir: '.', message: ':see_no_evil: add generated tailwind to .gitignore' }); |
||||
|
} |
||||
|
}); |
||||
|
} |
||||
|
} |
||||
Write
Preview
Loading…
Cancel
Save
Reference in new issue