我尝试了使用批处理脚本的方法,通过单个文件监视器调用Python脚本:
"""
less-prefixed.py
Chains less and autoprefixer, to produce a minified, vendor-prefixed css file.
"""
import argparse
import os
import subprocess
from pprint import pprint as pp
node_folder = r'C:/Users/ClementMandragora/AppData/Roaming/npm'
less_script = os.path.join(node_folder, 'lessc.cmd')
autoprefixer_script = os.path.join(node_folder, 'autoprefixer.cmd')
parser = argparse.ArgumentParser()
parser.add_argument("--file-name", help="filename, not including the extension", required=True)
parser.add_argument("--working-dir", help="the directory to do the work in", required=True)
args = parser.parse_args()
print('\nArgs:')
pp(vars(args))
print('')
os.chdir(args.working_dir)
print('CWD: {c}\n'.format(c=os.getcwd() + '\n'))
print('Running less-css...')
exitcode = subprocess.Popen([
less_script,
'--no-color',
'-x',
'--source-map={n}.css.map'.format(n=args.file_name),
'{n}.less'.format(n=args.file_name),
'{n}.min.css'.format(n=args.file_name)
], cwd=args.working_dir).wait()
assert exitcode is 0, 'Nonzero return code from less! Got: {r}'.format(r=exitcode)
print('less compilation completed.\nRunning autoprefixer...')
exitcode = subprocess.Popen([
autoprefixer_script,
'-o',
'{n}.prefixed.min.css'.format(n=args.file_name),
'{n}.min.css'.format(n=args.file_name)
], cwd=args.working_dir).wait()
assert exitcode is 0, 'Nonzero return code from autoprefixer! Got: {r}'.format(r=exitcode)
print('autoprefixer completed.\nFinal filename is {n}.prefixed.min.css'.format(n=args.file_name))
它能工作,但似乎不太方便。
下一步尝试是使用多个文件监视器;结果发现让autoprefixer监视css文件的更改,然后生成另一个css文件会导致循环。
因此,我在Webstorm中为匹配*.min.css
(less转换器的输出)的文件创建了自定义文件类型,然后为该扩展名创建了一个文件监视器。与默认/包含的less文件监视器的其他区别是:
- 程序:
C:\Users\ClementMandragora\AppData\Roaming\npm\autoprefixer.cmd
- 参数:
-o $FileNameWithoutExtension$.prefixed.css $FileName$
- 要刷新的输出路径:
$FileNameWithoutExtension$.prefixed.css:$FileNameWithoutExtension$.prefixed.css.map
最初对我来说并不清楚“要刷新的输出路径”也会向Webstorm发出信号,将生成的文件放在主*.less文件下,减少项目杂乱无章。(我将源和输出保存在同一个文件夹中。)