执行过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
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
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
"use strict";
 
Object.defineProperty(exports, "__esModule", {
  value: true
});
exports.default = preProcessPattern;
 
var _path = _interopRequireDefault(require("path"));
 
var _isGlob = _interopRequireDefault(require("is-glob"));
 
var _globParent = _interopRequireDefault(require("glob-parent"));
 
var _normalize = _interopRequireDefault(require("./utils/normalize"));
 
var _isTemplateLike = _interopRequireDefault(require("./utils/isTemplateLike"));
 
var _isObject = _interopRequireDefault(require("./utils/isObject"));
 
var _promisify = require("./utils/promisify");
 
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
 
/* eslint-disable no-param-reassign */
function preProcessPattern(globalRef, pattern) {
  const {
    logger,
    context,
    inputFileSystem,
    fileDependencies,
    contextDependencies,
    compilation
  } = globalRef;
  pattern = typeof pattern === 'string' ? {
    from: pattern
  } : Object.assign({}, pattern);
  pattern.to = pattern.to || '';
  pattern.context = pattern.context || context;
 
  if (!_path.default.isAbsolute(pattern.context)) {
    pattern.context = _path.default.join(context, pattern.context);
  }
 
  const isFromGlobPatten = (0, _isObject.default)(pattern.from) && pattern.from.glob || pattern.globOptions; // Todo remove this in next major
 
  const isToDirectory = _path.default.extname(pattern.to) === '' || pattern.to.slice(-1) === _path.default.sep; // Normalize paths
 
 
  pattern.from = isFromGlobPatten ? pattern.from : _path.default.normalize(pattern.from);
  pattern.context = _path.default.normalize(pattern.context);
  pattern.to = _path.default.normalize(pattern.to);
  pattern.ignore = globalRef.ignore.concat(pattern.ignore || []);
  logger.debug(`processing from: '${pattern.from}' to: '${pattern.to}'`);
 
  switch (true) {
    // if toType already exists
    case !!pattern.toType:
      break;
 
    case (0, _isTemplateLike.default)(pattern.to):
      pattern.toType = 'template';
      break;
 
    case isToDirectory:
      pattern.toType = 'dir';
      break;
 
    default:
      pattern.toType = 'file';
  } // If we know it's a glob, then bail early
 
 
  if (isFromGlobPatten) {
    logger.debug(`determined '${pattern.absoluteFrom}' is a glob`);
    pattern.fromType = 'glob';
    const globOptions = Object.assign({}, pattern.globOptions ? pattern.globOptions : pattern.from);
    delete globOptions.glob;
    pattern.absoluteFrom = _path.default.resolve(pattern.context, pattern.globOptions ? pattern.from : pattern.from.glob);
    pattern.glob = (0, _normalize.default)(pattern.context, pattern.globOptions ? pattern.from : pattern.from.glob);
    pattern.globOptions = globOptions;
    return Promise.resolve(pattern);
  }
 
  if (_path.default.isAbsolute(pattern.from)) {
    pattern.absoluteFrom = pattern.from;
  } else {
    pattern.absoluteFrom = _path.default.resolve(pattern.context, pattern.from);
  }
 
  logger.debug(`determined '${pattern.from}' to be read from '${pattern.absoluteFrom}'`);
 
  const noStatsHandler = () => {
    // If from doesn't appear to be a glob, then log a warning
    if ((0, _isGlob.default)(pattern.from) || pattern.from.includes('*')) {
      logger.debug(`determined '${pattern.absoluteFrom}' is a glob`);
      pattern.fromType = 'glob';
      pattern.glob = (0, _normalize.default)(pattern.context, pattern.from); // We need to add context directory as dependencies to avoid problems when new files added in directories
      // when we already in watch mode and this directories are not in context dependencies
      // `glob-parent` always return `/` we need normalize path
 
      contextDependencies.add(_path.default.normalize((0, _globParent.default)(pattern.absoluteFrom)));
    } else {
      const newWarning = new Error(`unable to locate '${pattern.from}' at '${pattern.absoluteFrom}'`);
      const hasWarning = compilation.warnings.some( // eslint-disable-next-line no-shadow
      warning => warning.message === newWarning.message); // Only display the same message once
 
      if (!hasWarning) {
        logger.warn(newWarning.message);
        compilation.warnings.push(newWarning);
      }
 
      pattern.fromType = 'nonexistent';
    }
  };
 
  logger.debug(`getting stats for '${pattern.absoluteFrom}' to determinate 'fromType'`);
  return (0, _promisify.stat)(inputFileSystem, pattern.absoluteFrom).catch(() => noStatsHandler()).then(stats => {
    if (!stats) {
      noStatsHandler();
      return pattern;
    }
 
    if (stats.isDirectory()) {
      logger.debug(`determined '${pattern.absoluteFrom}' is a directory`);
      contextDependencies.add(pattern.absoluteFrom);
      pattern.fromType = 'dir';
      pattern.context = pattern.absoluteFrom;
      pattern.glob = (0, _normalize.default)(pattern.absoluteFrom, '**/*');
      pattern.absoluteFrom = _path.default.join(pattern.absoluteFrom, '**/*');
      pattern.globOptions = {
        dot: true
      };
    } else if (stats.isFile()) {
      logger.debug(`determined '${pattern.absoluteFrom}' is a file`);
      fileDependencies.add(pattern.absoluteFrom);
      pattern.stats = stats;
      pattern.fromType = 'file';
      pattern.context = _path.default.dirname(pattern.absoluteFrom);
      pattern.glob = (0, _normalize.default)(pattern.absoluteFrom);
      pattern.globOptions = {
        dot: true
      };
    } else if (!pattern.fromType) {
      logger.warn(`unrecognized file type for ${pattern.from}`);
    }
 
    return pattern;
  });
}