diff --git a/__tests__/cli.test.js b/__tests__/cli.test.js index 5d434c37d..47c2bc57b 100644 --- a/__tests__/cli.test.js +++ b/__tests__/cli.test.js @@ -56,5 +56,17 @@ describe('cli', () => { expect(utils.writeFile.mock.calls[0][1]).toContain('.example') }) }) + + it('compiles CSS file with autoprefixer', () => { + cli(['build', inputCssPath]).then(() => { + expect(process.stdout.write.mock.calls[0][0]).toContain('-ms-input-placeholder') + }) + }) + + it('compiles CSS file without autoprefixer', () => { + cli(['build', inputCssPath, '--no-autoprefixer']).then(() => { + expect(process.stdout.write.mock.calls[0][0]).not.toContain('-ms-input-placeholder') + }) + }) }) }) diff --git a/src/cli/commands/build.js b/src/cli/commands/build.js index ab3939854..f94d51cde 100644 --- a/src/cli/commands/build.js +++ b/src/cli/commands/build.js @@ -22,11 +22,16 @@ export const options = [ usage: '-c, --config ', description: 'Tailwind config file.', }, + { + usage: '--no-autoprefixer', + description: "Don't add vendor prefixes using autoprefixer.", + }, ] export const optionMap = { output: ['output', 'o'], config: ['config', 'c'], + noAutoprefixer: ['no-autoprefixer'], } /** @@ -60,11 +65,11 @@ function stopWithHelp(...msgs) { * @param {string} outputFile * @return {Promise} */ -function build(inputFile, configFile, outputFile) { +function build(inputFile, configFile, outputFile, autoprefix) { const css = utils.readFile(inputFile) return new Promise((resolve, reject) => { - postcss([tailwind(configFile), autoprefixer]) + postcss([tailwind(configFile)].concat(autoprefix ? [autoprefixer] : [])) .process(css, { from: inputFile, to: outputFile, @@ -82,8 +87,10 @@ function build(inputFile, configFile, outputFile) { * @param {string} outputFile * @return {Promise} */ -function buildToStdout(inputFile, configFile, outputFile) { - return build(inputFile, configFile, outputFile).then(result => process.stdout.write(result.css)) +function buildToStdout(inputFile, configFile, outputFile, autoprefix) { + return build(inputFile, configFile, outputFile, autoprefix).then(result => + process.stdout.write(result.css) + ) } /** @@ -95,12 +102,12 @@ function buildToStdout(inputFile, configFile, outputFile) { * @param {int[]} startTime * @return {Promise} */ -function buildToFile(inputFile, configFile, outputFile, startTime) { +function buildToFile(inputFile, configFile, outputFile, autoprefix, startTime) { utils.header() utils.log() utils.log(emoji.go, 'Building...', chalk.bold.cyan(inputFile)) - return build(inputFile, configFile, outputFile).then(result => { + return build(inputFile, configFile, outputFile, autoprefix).then(result => { utils.writeFile(outputFile, result.css) const prettyTime = prettyHrtime(process.hrtime(startTime)) @@ -126,6 +133,7 @@ export function run(cliParams, cliOptions) { const inputFile = cliParams[0] const configFile = cliOptions.config && cliOptions.config[0] const outputFile = cliOptions.output && cliOptions.output[0] + const autoprefix = !cliOptions.noAutoprefixer !inputFile && stopWithHelp('CSS file is required.') !utils.exists(inputFile) && stop(chalk.bold.magenta(inputFile), 'does not exist.') @@ -135,8 +143,8 @@ export function run(cliParams, cliOptions) { stop(chalk.bold.magenta(configFile), 'does not exist.') const buildPromise = outputFile - ? buildToFile(inputFile, configFile, outputFile, startTime) - : buildToStdout(inputFile, configFile, outputFile) + ? buildToFile(inputFile, configFile, outputFile, autoprefix, startTime) + : buildToStdout(inputFile, configFile, outputFile, autoprefix) buildPromise.then(resolve).catch(reject) })