Showing
1 changed file
with
138 additions
and
0 deletions
1 | +/** | ||
2 | + * Yohobuy 构建脚本 | ||
3 | + * @author: xuqi<qi.xu@yoho.cn> | ||
4 | + * @date: 2016/4/25 | ||
5 | + */ | ||
6 | + | ||
7 | +'use strict'; | ||
8 | + | ||
9 | +const gulp = require('gulp'); | ||
10 | +const postcss = require('gulp-postcss'); | ||
11 | +const sourcemaps = require('gulp-sourcemaps'); | ||
12 | +const cssnano = require('gulp-cssnano'); | ||
13 | + | ||
14 | +const env = { | ||
15 | + dev: Symbol('development'), | ||
16 | + pro: Symbol('production') | ||
17 | +}; | ||
18 | + | ||
19 | +const config = require('../package.json'); | ||
20 | +const ftpConfig = { | ||
21 | + host: '218.94.75.50', | ||
22 | + user: 'php', | ||
23 | + pass: 'yoho9646' | ||
24 | +}; | ||
25 | +const distRoot = `dist/${config.name}`; | ||
26 | +const dist = { | ||
27 | + js: `${distRoot}/${config.version}`, | ||
28 | + css: `${distRoot}/${config.version}`, | ||
29 | + assets: `${distRoot}/assets`, | ||
30 | + img: `${distRoot}/assets/img`, | ||
31 | + font: `${distRoot}/assets/font` | ||
32 | +}; | ||
33 | + | ||
34 | +/** | ||
35 | + * postcss plugins for both dev and pro | ||
36 | + * @parem et Symbol | ||
37 | + */ | ||
38 | +const postcssPlugin = (et) => { | ||
39 | + var sprites = { | ||
40 | + spritesmith: { | ||
41 | + padding: 2 | ||
42 | + }, | ||
43 | + groupBy(file) { | ||
44 | + var group = file.url.split('/')[0]; | ||
45 | + | ||
46 | + group = group === '' ? 'yo' : group; | ||
47 | + | ||
48 | + return group ? Promise.resolve(group) : Promise.reject(group); | ||
49 | + } | ||
50 | + }, | ||
51 | + assets, | ||
52 | + plugins; | ||
53 | + | ||
54 | + // assets & sprites config in both dev and pro | ||
55 | + if (et === env.pro) { | ||
56 | + assets = { | ||
57 | + loadPaths: [dist.img, dist.font], | ||
58 | + }; | ||
59 | + | ||
60 | + Object.assign(sprites, { | ||
61 | + basePath: dist.img, | ||
62 | + stylesheetPath: dist.css, | ||
63 | + spritePath: dist.img | ||
64 | + }); | ||
65 | + } else if (et === env.dev) { | ||
66 | + assets = { | ||
67 | + loadPaths: ['img/', 'font/'], | ||
68 | + relativeTo: 'css/' | ||
69 | + }; | ||
70 | + | ||
71 | + Object.assign(sprites, { | ||
72 | + basePath: 'img/', | ||
73 | + stylesheetPath: 'css/', | ||
74 | + spritePath: 'img/' | ||
75 | + }); | ||
76 | + }; | ||
77 | + | ||
78 | + plugins = [ | ||
79 | + require('autoprefixer')({ | ||
80 | + browsers: ['> 1%'] | ||
81 | + }), | ||
82 | + require('precss'), | ||
83 | + require('postcss-sprites').default(sprites), | ||
84 | + require('postcss-assets')(assets), | ||
85 | + require('postcss-calc'), | ||
86 | + require('postcss-opacity'), | ||
87 | + | ||
88 | + //可选 | ||
89 | + require('postcss-use')({ | ||
90 | + modules: ['postcss-clearfix', 'postcss-crip', 'postcss-short', 'postcss-center', 'postcss-position'] | ||
91 | + }) | ||
92 | + ]; | ||
93 | + | ||
94 | + if (et === env.pro) { | ||
95 | + plugins.push(require('postcss-cachebuster')({ | ||
96 | + imagesPath: `/${dist.img}`, | ||
97 | + cssPath: `/${dist.css}` | ||
98 | + })); | ||
99 | + } | ||
100 | + return plugins; | ||
101 | +}; | ||
102 | + | ||
103 | +// postcss compile in dev | ||
104 | +gulp.task('postcss-dev', () => { | ||
105 | + return gulp.src('scss/index.css') | ||
106 | + .pipe(sourcemaps.init()) | ||
107 | + .pipe(postcssPlugin(env.dev)) | ||
108 | + .pipe(sourcemaps.write('.')) | ||
109 | + .pipe(gulp.dest('css/')); | ||
110 | +}); | ||
111 | + | ||
112 | +// postcss file watch | ||
113 | +gulp.task('postcss-watch', () => { | ||
114 | + gulp.watch('scss/**/*.css', ['postcss-dev']); | ||
115 | +}); | ||
116 | + | ||
117 | +// copy assets | ||
118 | +gulp.task('assets', ['img', 'font']); | ||
119 | + | ||
120 | +// copy img | ||
121 | +gulp.task('img', () => { | ||
122 | + return gulp.src('img/**/*') | ||
123 | + .pipe(gulp.dest(dist.img)); | ||
124 | +}); | ||
125 | + | ||
126 | +//copy font | ||
127 | +gulp.task('font', () => { | ||
128 | + return gulp.src('font/*') | ||
129 | + .pipe(gulp.dest(dist.font)); | ||
130 | +}); | ||
131 | + | ||
132 | +// postcss compile in pro | ||
133 | +gulp.task('postcss', ['assets'], () => { | ||
134 | + return gulp.src('scss/index.css') | ||
135 | + .pipe(postcssPlugin(env.pro)) | ||
136 | + .pipe(cssnano()) | ||
137 | + .pipe(gulp.dest(dist.css)); | ||
138 | +}); |
-
Please register or login to post a comment