执行过npm install命令的vue-element-admin源码
康凯
2022-05-20 aa4c235a8ca67ea8b731f90c951a465e92c0a865
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
const out = require('./console-out');
 
module.exports = {
    combineBypassData
};
 
/**
 * Combine different types of bypass data
 * @param generator - The generator object involved
 * @param bypassArr - The array of overwritten properties
 * @param plopArgV - The original args passed to plop without using names
 */
function combineBypassData(generator, bypassArr, plopArgV) {
    // Get named prompts that are passed to the command line
    const promptNames = generator.prompts.map((prompt) => prompt.name);
    // Check if bypassArr is too long for promptNames
    if (bypassArr.length > promptNames.length) {
        console.error(chalk.red('[PLOP] ') + 'Too many bypass arguments passed for "' + generator.name + '"');
        out.getHelpMessage(generator);
        process.exit(1);
    }
 
    let namedBypassArr = [];
    if (Object.keys(plopArgV).length > 0) {
        // Let's make sure we made no whoopsy-poos (AKA passing incorrect inputs)
        let errors = false;
        Object.keys(plopArgV).forEach((arg) => {
            if (!(promptNames.find((name) => name === arg)) && arg !== '_') {
                console.error(chalk.red('[PLOP] ') + '"' + arg + '"' + ' is an invalid argument for "' + generator.name + '"');
                errors = true;
            }
        });
        if (errors) {
            out.getHelpMessage(generator);
            process.exit(1);
        }
        namedBypassArr = promptNames.map((name) => plopArgV[name] ? plopArgV[name] : undefined);
    }
 
    // merge the bypass data with named bypass values
    const mergedBypass = mergeArrays(bypassArr, namedBypassArr);
    // clean up `undefined` values
    return mergedBypass.map(v => v === undefined ? '_' : v);
}
 
function mergeArrays(baseArr, overlay) {
    const length = Math.max(baseArr.length, overlay.length);
    return (new Array(length)).fill().map(
        (v, i) => overlay[i] !== undefined ? overlay[i] : baseArr[i]
    );
}