UNPKG

2.56 kBJavaScriptView Raw
1import fs from 'fs-extra';
2import { dirname } from 'path';
3import less from 'less';
4import { createFilter } from 'rollup-pluginutils';
5import { insertStyle } from './style.js';
6
7
8let renderSync = (code, option) => {
9 return less.render(code, option)
10 .then(function(output){
11 return output.css;
12 }, function(error){
13 throw error;
14 })
15};
16
17let fileCount = 0;
18
19export default function plugin (options = {}) {
20 options.insert = options.insert || false;
21 const filter = createFilter(options.include || [ '**/*.less', '**/*.css' ], options.exclude || 'node_modules/**');
22
23 const injectFnName = '__$styleInject'
24 return {
25 name: 'less',
26 intro() {
27 return options.insert ? insertStyle.toString().replace(/insertStyle/, injectFnName) : '';
28 },
29 async transform(code, id) {
30 if (!filter(id)) {
31 return null;
32 }
33 fileCount++;
34
35 try {
36 options.option = options.option || {};
37 options.option['filename'] = id;
38 options.output = options.output || 'rollup.build.css';
39 if (options.plugins) {
40 options.option['plugins'] = options.plugins
41 }
42
43 let css = await renderSync(code, options.option);
44
45 if(options.output&&isFunc(options.output)){
46 css = await options.output(css, id);
47 }
48
49 if (options.output&&isString(options.output)) {
50 if(fileCount == 1){
51 //clean the output file
52 fs.removeSync(options.output);
53 }
54 fs.appendFileSync(options.output, css);
55 }
56
57 let exportCode = '';
58
59 if(options.insert!=false){
60 exportCode = `export default ${injectFnName}(${JSON.stringify(css.toString())});`;
61 }else{
62 exportCode = `export default ${JSON.stringify(css.toString())};`;
63 }
64 return {
65 code: exportCode,
66 map: { mappings: '' }
67 };
68 } catch (error) {
69 throw error;
70 }
71 }
72 };
73};
74
75function isString (str) {
76 if(typeof str == 'string'){
77 return true;
78 }else{
79 return false;
80 }
81}
82
83function isFunc (fn){
84 if ( typeof fn == 'function' ){
85 return true;
86 }else{
87 return false;
88 }
89}