UNPKG

@sanpjs/bundler-webpack

Version:

@sanpjs/bundler-webpack

146 lines 5.53 kB
"use strict"; /** * 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