Merge pull request #98 from adamwathan/make-tailwindcss-npm-module

Make tailwindcss npm module
This commit is contained in:
Adam Wathan 2017-09-01 17:44:40 -04:00 committed by GitHub
commit 572c772bc0
7 changed files with 7386 additions and 103 deletions

1
.gitignore vendored
View File

@ -2,3 +2,4 @@
/lib
yarn.lock
*.sublime-workspace
/example

7279
package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

View File

@ -3,8 +3,9 @@
"version": "0.1.0",
"description": "A utility-first CSS framework for rapid UI development.",
"license": "MIT",
"main": "lib/index.js",
"bin": {
"tailwind": "lib/index.js"
"tailwind": "lib/cli.js"
},
"contributors": [
"Adam Wathan <adam.wathan@gmail.com>",

View File

@ -1,6 +1,6 @@
import fs from 'fs'
import postcss from 'postcss'
import tailwind from './tailwind'
import tailwind from '..'
import defaultConfig from './defaultConfig'
console.info('Building Tailwind!')

82
src/cli.js Executable file
View File

@ -0,0 +1,82 @@
#!/usr/bin/env node
import fs from 'fs'
import _ from 'lodash'
import path from 'path'
import postcss from 'postcss'
import defaultConfig from './defaultConfig'
import program from 'commander'
import tailwind from '..'
let splitFileName = filename => {
return filename.split('.')
}
let buildTailwind = config => {
console.log('Building Tailwind!')
fs.readFile(inputFile, (err, css) => {
postcss([tailwind(config)])
.process(css)
.then(result => {
fs.writeFileSync(outputFile, result.css)
})
.catch(error => console.log(error))
})
console.log('Finished building Tailwind!')
}
let getConfig = (customConfig, replace) => {
if (replace) {
return customConfig
} else {
return _.merge(defaultConfig, customConfig)
}
}
program
.version('0.1.0')
.usage('[options] <file ...>')
.option('-c, --config [path]', 'set config path')
.option(
'-r, --replace',
'replace the built-in configuration with the provided config file'
)
.parse(process.argv)
let inputFile = program.args[0]
if (!inputFile) {
console.error('No input file given!')
process.exit(1)
}
let outputFile =
program.args[1] || `${splitFileName(program.args[0])[0]}-output.css`
if (program.config !== undefined) {
fs.exists(program.config, exists => {
if (!exists) {
console.error(`Config file [${program.config}] does not exist.`)
process.exit(1)
}
fs.readFile(program.config, (err, config) => {
if (err) {
console.error(
`There was a problem reading config file [${program.config}].`
)
process.exit(1)
}
const customConfig = JSON.parse(config.toString())
let finalConfig = getConfig(customConfig, program.replace)
buildTailwind(finalConfig)
})
})
} else {
buildTailwind(defaultConfig)
}

95
src/index.js Executable file → Normal file
View File

@ -1,82 +1,29 @@
#!/usr/bin/env node
import fs from 'fs'
import _ from 'lodash'
import path from 'path'
import postcss from 'postcss'
import cssnext from 'postcss-cssnext'
import stylefmt from 'stylefmt'
import defaultConfig from './defaultConfig'
import program from 'commander'
import tailwind from './tailwind'
let splitFileName = filename => {
return filename.split('.')
}
import addCustomMediaQueries from './lib/addCustomMediaQueries'
import generateUtilities from './lib/generateUtilities'
import substituteHoverableAtRules from './lib/substituteHoverableAtRules'
import substituteResponsiveAtRules from './lib/substituteResponsiveAtRules'
import substituteClassApplyAtRules from './lib/substituteClassApplyAtRules'
let buildTailwind = config => {
console.log('Building Tailwind!')
const plugin = postcss.plugin('tailwind', options => {
options = options || defaultConfig
fs.readFile(inputFile, (err, css) => {
postcss([tailwind(config)])
.process(css)
.then(result => {
fs.writeFileSync(outputFile, result.css)
})
.catch(error => console.log(error))
})
return postcss([
addCustomMediaQueries(options),
generateUtilities(options),
substituteHoverableAtRules(options),
substituteResponsiveAtRules(options),
substituteClassApplyAtRules(options),
cssnext(),
stylefmt,
])
})
console.log('Finished building Tailwind!')
}
let getConfig = (customConfig, merge) => {
if (merge) {
return customConfig
} else {
return _.merge(defaultConfig, customConfig)
}
}
program
.version('0.1.0')
.usage('[options] <file ...>')
.option('-c, --config [path]', 'set config path')
.option(
'-r, --replace',
'replace the built-in configuration with the provided config file'
)
.parse(process.argv)
let inputFile = program.args[0]
if (!inputFile) {
console.error('No input file given!')
process.exit(1)
}
let outputFile =
program.args[1] || `${splitFileName(program.args[0])[0]}-output.css`
if (program.config !== undefined) {
fs.exists(program.config, exists => {
if (!exists) {
console.error(`Config file [${program.config}] does not exist.`)
process.exit(1)
}
fs.readFile(program.config, (err, config) => {
if (err) {
console.error(
`There was a problem reading config file [${program.config}].`
)
process.exit(1)
}
const customConfig = JSON.parse(config.toString())
let finalConfig = getConfig(customConfig, program.replace)
buildTailwind(finalConfig)
})
})
} else {
buildTailwind(defaultConfig)
}
module.exports = plugin

View File

@ -1,27 +0,0 @@
import fs from 'fs'
import _ from 'lodash'
import postcss from 'postcss'
import cssnext from 'postcss-cssnext'
import stylefmt from 'stylefmt'
import defaultConfig from './defaultConfig'
import addCustomMediaQueries from './lib/addCustomMediaQueries'
import generateUtilities from './lib/generateUtilities'
import substituteHoverableAtRules from './lib/substituteHoverableAtRules'
import substituteResponsiveAtRules from './lib/substituteResponsiveAtRules'
import substituteClassApplyAtRules from './lib/substituteClassApplyAtRules'
export default postcss.plugin('tailwind', options => {
options = options || defaultConfig
return postcss([
addCustomMediaQueries(options),
generateUtilities(options),
substituteHoverableAtRules(options),
substituteResponsiveAtRules(options),
substituteClassApplyAtRules(options),
cssnext(),
stylefmt,
])
})