https://dockyard.com/blog/2018/02/01/writing-your-first-postcss-plugin
git clone [email protected]:postcss/postcss-plugin-boilerplate.git
按照官方文档,你会遇到上图错误。解决办法,fork官方库之后,再执行git clone,或者直接下载压缩包。
node ./postcss-plugin-boilerplate/start
意思是执行目录下的start.js文件,故,如果你已经进入到目录,执行node start即可。
注意:执行node start后会报以下错误
根据错误提示,是package.json文件中语法报错,在package.json的行,有一个KEYWORDS,IDE已经给出了错误提示,从官方库的issues找到了答案(看下方截图)。废话不多说,将KEYWORDS干掉,再次执行node start,按着提示输入信息,新成了一个新的库,我的库名叫postcss-my-first。
let postcss = require('postcss');
module.exports = postcss.plugin('postcss-test-plugin', function () {
return function (root) {
root.walkRules(function (rule) {
rule.walkDecls(/^overflow-?/, function (decl) {
if (decl.value === 'scroll') {
let hasTouch = rule.some(function (i) {
return i.prop === '-webkit-overflow-scrolling';
});
if (!hasTouch) {
rule.append({
prop: '-webkit-overflow-scrolling',
value: 'touch'
});
}
}
});
});
};
});
let postcss = require('postcss')
let plugin = require('./')
async function run(input, output, opts) {
let result = await postcss([plugin(opts)]).process(input, {from: undefined})
console.log(result.css)
expect(result.css).toEqual(output)
expect(result.warnings()).toHaveLength(0)
}
it('does something', async () => {
await run('a{ width:20px;overflow:scroll }',
'a{ width:20px;overflow:scroll;-webkit-overflow-scrolling:touch }', {})
})
在控制台运行npm run my-test
测试通过,插件为自动为我们添加了样式-webkit-overflow-scrolling:touch
插件使用
module.exports = {
plugins: {
autoprefixer: {},
'@postcss-my-first': {}
}
};
autoprefixer:{}为fostcss.config.js中的默认配置,表示启用autoprefixer插件,@postcss-my-first为我这次编写的postCSS插件名,值为空对象表示配置为空。
.login-btn {
text-align: center;
overflow: scroll;
}