-
Notifications
You must be signed in to change notification settings - Fork 10
/
Copy pathgulpfile.js
109 lines (92 loc) · 3.2 KB
/
gulpfile.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
const del = require("del");
const gulp = require("gulp");
const sass = require("gulp-sass")(require("sass"));
const shell = require("gulp-shell");
const header = require("gulp-header");
const postcss = require("gulp-postcss");
const corePackage = require("./packages/core/package.json");
const reactPackage = require("./packages/react/package.json");
const production = ["ci", "production"].includes(process.env.NODE_ENV);
const copyrightYear = `2019-${new Date().getFullYear()}`;
const createBanner = ({ name, version, license, homepage }) => `/***
* ${name} v${version}
* Copyright ${copyrightYear} W. W. Norton & Company
* Licensed under the ${license} license found in the LICENSE file in the root
* directory at ${homepage}.
**/
`;
const clean = () =>
del([
"./packages/*/dist",
"./website/.docusaurus",
"./.nyc_output",
"./coverage",
"./public",
]);
const cleanDocs = () =>
del(["./website/.docusaurus", "./.nyc_output", "./coverage", "./public"]);
cleanDocs.displayName = "clean:docs";
const cleanAll = gulp.parallel(clean, cleanDocs);
cleanAll.displayName = "clean:all";
const createSass =
({ src, dest }) =>
() =>
gulp
.src(src, {
sourcemaps: !production,
since: gulp.lastRun(sass),
})
.pipe(
sass({
style: production ? "compressed" : "expanded",
loadPaths: ["node_modules"],
}).on("error", sass.logError)
)
.pipe(postcss())
.pipe(header(createBanner(corePackage)))
.pipe(gulp.dest(dest, { sourcemaps: !production && "." }));
const createJsBanner =
(cwd, { name, version, license }) =>
() =>
gulp
.src("dist/**/*.js", { cwd })
.pipe(header(createBanner({ name, version, license })))
.pipe(gulp.dest("dist", { cwd }));
// `@wwnds/core`
const coreSass = createSass({
src: ["./packages/core/src/main.scss", "./packages/core/src/tokens.scss"],
dest: "./packages/core/dist",
});
coreSass.displayName = "core:sass";
const coreTs = shell.task("npm run build", { cwd: "./packages/core" });
coreTs.displayName = "core:ts";
const coreBanner = createJsBanner("./packages/core", corePackage);
coreBanner.displayName = "core:banner";
const tsCore = gulp.series(coreTs, coreBanner);
tsCore.displayName = "ts:core";
const core = gulp.parallel(coreSass /* , tsCore */);
// `@wwnds/react`
const reactMain = shell.task("npm run build:main", { cwd: "./packages/react" });
reactMain.displayName = "react:main";
const reactUmd = shell.task("npm run build:umd", { cwd: "./packages/react" });
reactUmd.displayName = "react:umd";
const reactBanner = createJsBanner("./packages/react", reactPackage);
reactBanner.displayName = "react:banner";
const tsReact = gulp.series(gulp.parallel(reactMain, reactUmd), reactBanner);
tsReact.displayName = "ts:react";
const react = gulp.parallel(tsReact);
// typescript/sass
const sassTask = gulp.parallel(coreSass);
sassTask.displayName = "sass";
const ts = gulp.parallel(tsCore, tsReact);
exports.clean = clean;
exports.cleanDocs = cleanDocs;
exports.cleanAll = cleanAll;
exports.sass = sassTask;
exports.ts = ts;
exports.core = core;
exports.react = react;
const buildLib = gulp.series(clean, gulp.parallel(core, react));
buildLib.displayName = "build";
exports.buildLib = buildLib;
exports.default = gulp.series(clean, gulp.parallel(core, react));