@sanpjs/bundler-webpack
Version:
@sanpjs/bundler-webpack
146 lines • 5.53 kB
JavaScript
;
/**
* Copyright (c) Baidu Inc. All rights reserved.
*
* This source code is licensed under the MIT license.
* See LICENSE file in the project root for license information.
*
* @file 跟路径相关函数
* @author ksky521
*/
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.getAssetPath = exports.copyFiles = exports.defineVar = exports.replaceOption = exports.replaceRule = exports.getLoaders = exports.getLoader = void 0;
const path_1 = require("path");
const fs_extra_1 = __importDefault(require("fs-extra"));
const mkdirp_1 = __importDefault(require("mkdirp"));
const glob_1 = __importDefault(require("glob"));
const lodash_compact_1 = __importDefault(require("lodash.compact"));
const builtinLoaders = __importStar(require("../loaders"));
const getLoader = (name, context) => {
const loaderFactory = builtinLoaders[name];
return loaderFactory(context);
};
exports.getLoader = getLoader;
const getLoaders = (names, context) => {
return (0, lodash_compact_1.default)((0, lodash_compact_1.default)(names).map((v) => (0, exports.getLoader)(v, context)));
};
exports.getLoaders = getLoaders;
/**
* 替换指定规则
* @param {RegExp} test webpack.module.rules的条件test 例如:/\.less$/
* @param {array} use rule下的指定的use 例如:[{loader: 'less-loader', options: {}}]
* @param {object} config webpackConfig对象
*/
const replaceRule = (test, use, config) => {
config?.module?.rules?.forEach((r) => {
if (r.test.toString() === test.toString()) {
r.use = use;
}
});
};
exports.replaceRule = replaceRule;
/**
* 替换指定规则的某一loader配置
* @param {RegExp} test webpack.module.rule的条件test 例如:/\.less$/
* @param {string} loader rule下的指定loader 例如:less-loader
* @param {object} options 新的配置,将直接替换已有配置
* @param {object} config webpackConfig对象
*/
const replaceOption = (test, loader, options, config) => {
config?.module?.rules?.forEach((r) => {
if (r.test.toString() === test.toString()) {
r.use.forEach((u) => {
if (u.loader.indexOf(loader) > -1) {
u.options = options;
}
});
}
});
};
exports.replaceOption = replaceOption;
// 将 env 中的值进行赋值
const defineVar = (raw) => {
const vars = {
// TODO 这里要不要按照 mode 设置下 undefined 的情况?
NODE_ENV: process.env.NODE_ENV,
PRODUCTION: process.env.NODE_ENV === 'production'
};
// 这里把var 变量名拆出来
const re = /^SANP_VAR_([\w\d\_]+)$/;
Object.keys(process.env).forEach(key => {
if (re.test(key)) {
const name = re.exec(key) || [];
vars[name[1]] = process.env[key];
}
});
if (raw) {
return vars;
}
for (const [key, value] of Object.entries(vars)) {
vars[key] = JSON.stringify(value);
}
return vars;
};
exports.defineVar = defineVar;
const copyFiles = (copyConfig, root, target) => {
(0, lodash_compact_1.default)(copyConfig).forEach((item) => {
let copyObj = typeof item === 'string'
? {
from: (0, path_1.join)(root, item),
to: target,
}
: {
from: (0, path_1.join)(root, item.from),
to: (0, path_1.join)(target, item.to),
};
if (!fs_extra_1.default.existsSync(copyObj.from)) {
return;
}
let files = [];
if (fs_extra_1.default.statSync(copyObj.from).isDirectory()) {
files = glob_1.default.sync('**/*', {
cwd: copyObj.from,
dot: true,
ignore: ['**/node_modules/**', '.DS_Store']
});
}
else {
files.push(copyObj.from);
}
files.forEach(file => {
const absFile = (0, path_1.join)(copyObj.from, file);
if (fs_extra_1.default.statSync(absFile).isDirectory()) {
return;
}
const absTarget = (0, path_1.join)(copyObj.to, file);
mkdirp_1.default.sync((0, path_1.dirname)(absTarget));
fs_extra_1.default.copyFileSync(absFile, absTarget);
});
});
};
exports.copyFiles = copyFiles;
const getAssetPath = (assetDir, filePath) => (assetDir ? path_1.posix.join(assetDir, filePath) : filePath);
exports.getAssetPath = getAssetPath;
//# sourceMappingURL=index.js.map