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