mirror of
https://github.com/tailwindlabs/tailwindcss.git
synced 2025-12-08 21:36:08 +00:00
Merge pull request #98 from adamwathan/make-tailwindcss-npm-module
Make tailwindcss npm module
This commit is contained in:
commit
572c772bc0
1
.gitignore
vendored
1
.gitignore
vendored
@ -2,3 +2,4 @@
|
||||
/lib
|
||||
yarn.lock
|
||||
*.sublime-workspace
|
||||
/example
|
||||
|
||||
7279
package-lock.json
generated
Normal file
7279
package-lock.json
generated
Normal file
File diff suppressed because it is too large
Load Diff
@ -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>",
|
||||
|
||||
@ -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
82
src/cli.js
Executable 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
95
src/index.js
Executable file → Normal 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
|
||||
|
||||
@ -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,
|
||||
])
|
||||
})
|
||||
Loading…
x
Reference in New Issue
Block a user