UNPKG

4.35 kBJavaScriptView Raw
1///@ts-check
2"use strict";
3
4const fs = require("fs");
5const path = require("path");
6
7const gulp = require("gulp");
8const gulpRename = require("gulp-rename");
9
10// const gulpRollup = require("gulp-better-rollup");
11const npm = require("../lib/npm-dependency");
12const loadPlugins = require("../lib/rollup-plugins");
13const error = require("../log/error");
14const warn = require("../log/warn");
15const debug = require("../log/compile");
16const size = require("../log/size");
17
18const TITLE = "npm:";
19
20/**
21 * 组件component
22 * @param {string} dependencyName
23 * @param {string} mpDistPath
24 * @param {string} destName
25 */
26function createMpTask(dependencyName, mpDistPath, destName) {
27 return () => {
28 return gulp
29 .src(path.join(mpDistPath, "**/*"))
30 .pipe(
31 debug({
32 title: TITLE,
33 srcName: `<${dependencyName}(component)>`,
34 dist: path.join("miniprogram_npm", dependencyName) + path.sep,
35 // distName: destName
36 // once: true,
37 }),
38 )
39 .pipe(gulp.dest(destName))
40 .on("error", error(`${TITLE} <${dependencyName}(component)>`))
41 .pipe(
42 size({
43 title: TITLE,
44 sub: `${dependencyName}(component)`,
45 showFiles: false,
46 showTotal: true,
47 }),
48 );
49 };
50}
51
52/**
53 * 普通NPM依赖 rollup
54 * @param {string} dependencyName
55 * @param {string} entryFilePath
56 * @param {string} destName
57 * @param {string[]} dependencyNames
58 */
59function createNpmTask(dependencyName, entryFilePath, destName, dependencyNames) {
60 const gulpRollup = require("gulp-better-rollup");
61 const rollup = require("rollup");
62 if (!fs.existsSync(entryFilePath)) {
63 warn(TITLE)(`can't resolve ${entryFilePath}`);
64 return (cb) => {
65 cb();
66 }
67 }
68 return () =>
69 gulp
70 .src(entryFilePath)
71 .pipe(
72 debug({
73 title: TITLE,
74 srcName: `<${dependencyName}>`,
75 dist: path.join("miniprogram_npm", dependencyName),
76 // distName: destName
77 }),
78 )
79 .pipe(
80 gulpRollup(
81 {
82 rollup: rollup,
83 onwarn: warn(TITLE, dependencyName),
84 external: dependencyNames,
85 treeshake: { propertyReadSideEffects: false },
86 plugins: loadPlugins(),
87 },
88 {
89 format: "es",
90 esModule: false,
91 }
92 ),
93 )
94 .on("error", error(`${TITLE} <${dependencyName}>`))
95 .pipe(
96 gulpRename({
97 basename: "index",
98 extname: ".js",
99 }),
100 )
101 .pipe(gulp.dest(destName))
102 .pipe(size({ title: TITLE, sub: dependencyName, showFiles: false, showTotal: true }));
103}
104
105module.exports =
106 /**
107 *
108 * @param {string} cwd
109 * @param {string} distPath
110 * @param {string[]} baseDependencies
111 */
112 function buildNpm(cwd, distPath, baseDependencies) {
113 const mp_npm = npm.getMp_NpmDependencies(baseDependencies, cwd, cwd);
114 const mpDependencies = mp_npm[0];
115 const npmDependencies = mp_npm[1];
116 const mpTask = Object.keys(mpDependencies).reduce((result, depName) => {
117 const mpDistPath = mpDependencies[depName];
118 const dest = path.join(distPath, "miniprogram_npm", depName);
119 result.push(createMpTask(depName, mpDistPath, dest));
120 return result
121 }, []);
122
123 const dependencyNames = Object.keys(npmDependencies);
124 const npmTasks = dependencyNames.reduce((result, dependencyName) => {
125 const entryFilePath = npmDependencies[dependencyName];
126 const dest = path.join(distPath, "miniprogram_npm", dependencyName);
127 result.push(createNpmTask(dependencyName, entryFilePath, dest, dependencyNames));
128 return result;
129 }, []);
130 return gulp.parallel(mpTask.concat(npmTasks));
131 };