Skip to content

Commit 988b8e6

Browse files
committed
refactor: keep vendors in separate folders
1 parent 8e6b5f0 commit 988b8e6

File tree

16 files changed

+717
-905
lines changed

16 files changed

+717
-905
lines changed

build/vendors-sass.js

Lines changed: 127 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,127 @@
1+
#!/usr/bin/env node
2+
3+
'use strict'
4+
5+
const autoprefixer = require('autoprefixer');
6+
const chalk = require('chalk')
7+
const fs = require('fs')
8+
const glob = require('glob')
9+
const mkdirp = require('mkdirp')
10+
const path = require('path')
11+
const postcss = require('postcss');
12+
const sass = require('node-sass')
13+
const sh = require('shelljs')
14+
15+
const basename = path.basename
16+
const dirname = path.dirname
17+
const resolve = path.resolve
18+
const normalize = path.normalize
19+
const join = path.join
20+
const relative = path.relative
21+
const extension = path.extname
22+
23+
const vendors = () => {
24+
const cwd = 'src/scss/vendors/'
25+
const pattern = '**/*.scss'
26+
const ignore = '**/_*.scss'
27+
const options = {
28+
cwd: 'src/scss/vendors/',
29+
ignore: ignore
30+
}
31+
const filenames = new glob.sync(pattern, options)
32+
return filenames.map((filename) => {
33+
const obj = {}
34+
obj['dir'] = filename.split('/')[0]
35+
obj['path'] = resolve(cwd, filename)
36+
return obj
37+
})
38+
}
39+
40+
const compileSass = (options = {}) => {
41+
// set default options
42+
options = Object.assign({
43+
style: 'expanded'
44+
}, options);
45+
46+
// render the result
47+
let compiled
48+
try {
49+
compiled = sass.renderSync({
50+
file: options.src,
51+
outFile: options.dest,
52+
outputStyle: options.style,
53+
precision: 6,
54+
sourceMap: true,
55+
sourceMapContents: true
56+
})
57+
} catch(e) {
58+
//Catch error, the process crashed
59+
const error = `
60+
file: ${e.file},
61+
line: ${e.line},
62+
column: ${e.column},
63+
message: ${e.message},
64+
formatted: ${e.formatted}
65+
`
66+
console.log(chalk.red(error))
67+
return
68+
}
69+
70+
if (compiled && compiled.css){
71+
console.log(chalk.green('Rendering Complete, saving .css file...'))
72+
console.log(chalk.green(`Wrote CSS to ${options.dest}`))
73+
console.log(chalk.green(`Wrote Source Map to ${options.map}`))
74+
console.log(`\n`)
75+
76+
// add prefixes
77+
const prefixed = postcss([ autoprefixer ]).process(compiled.css, {
78+
from: options.src,
79+
to: options.dest
80+
})
81+
prefixed.then((result) => {
82+
result.warnings().forEach((warning) => {
83+
console.warn(warning.toString())
84+
})
85+
// write the result to file
86+
mkdirp(dirname(options.dest), (error) => {
87+
if (error) return cb(error)
88+
// create .css file
89+
fs.writeFile(options.dest,result.css, (error) => {
90+
if (error) return cb(error)
91+
})
92+
// create .css.map file
93+
fs.writeFile(options.dest,compiled.map, (error) => {
94+
if (error) return cb(error)
95+
})
96+
console.log(' ' + options.dest + ' built.');
97+
})
98+
})
99+
}
100+
}
101+
102+
const compile = (vendors) => {
103+
vendors.forEach((vendor) => {
104+
const dest = resolve(__dirname, '..', 'src/vendors', vendor.dir, 'css', path.parse(vendor.path).name)
105+
// Expanded
106+
compileSass({
107+
src : vendor.path,
108+
dest: dest + '.css',
109+
map: dest + '.css.map'
110+
});
111+
112+
// Minified
113+
compileSass({
114+
src : vendor.path,
115+
dest: dest + '.min.css',
116+
map: dest + '.min.css.map',
117+
style: 'compressed'
118+
});
119+
})
120+
}
121+
122+
const main = () => {
123+
// vendors()
124+
compile(vendors())
125+
}
126+
127+
main()

package-lock.json

Lines changed: 29 additions & 29 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@
4646
"build-vendors": "node build/vendors.js",
4747
"css": "npm-run-all --parallel css-compile* --sequential css-prefix css-minify*",
4848
"css-compile": "node-sass --output-style expanded --source-map true --source-map-contents true --precision 6 src/scss/style.scss src/css/style.css",
49-
"css-compile-vendors": "foreach -g \"src/scss/vendors/**/*.scss\" -i \"src/scss/vendors/**/_*.scss\" -x \"node-sass --output-style expanded --source-map true --source-map-contents true --precision 6 --output src/vendors/css/ #{path}\" --no-c",
49+
"css-compile-vendors": "foreach -g \"src/scss/vendors/**/*.scss\" -i \"src/scss/vendors/**/_*.scss\" -x \"node-sass --output-style expanded --source-map true --source-map-contents true --precision 6 --output src/vendors/css/#{reldir}/ #{path}\" --no-c",
5050
"css-lint": "stylelint --config build/.stylelintrc --syntax scss \"src/scss/**/*.scss\"",
5151
"css-minify": "cleancss --level 1 --source-map --source-map-inline-sources --output src/css/style.min.css src/css/style.css",
5252
"css-minify-vendors": "foreach -g \"src/vendors/css/*.css\" -i \"src/vendors/css/*.min.css\" -x \"cleancss --level 1 --source-map --source-map-inline-sources #{path} --output #{dir}/#{name}.min#{ext}\" --no-c",
@@ -84,6 +84,7 @@
8484
"babel-eslint": "^8.2.3",
8585
"babel-plugin-transform-es2015-modules-strip": "^0.1.1",
8686
"browser-sync": "2.24.1",
87+
"chalk": "^2.4.1",
8788
"clean-css-cli": "^4.1.11",
8889
"copyfiles": "^2.0.0",
8990
"cross-env": "^5.1.4",

0 commit comments

Comments
 (0)