UNPKG

ts-npm-init

Version:

创建TypeScript NPM库的现代化模板

108 lines (97 loc) 3.12 kB
/** * 打包配置文件 * 集中管理所有可配置选项 */ const pkg = require('../package.json'); // ============= 用户可配置区域 ============= /** * 要生成的输出格式,可以根据需要添加或删除 * @type {('cjs'|'es'|'umd'|'iife')[]} 格式数组 * * - cjs (CommonJS): 适用于Node.js环境和webpack等打包工具 * - es (ES Module): 适用于支持ES模块的现代浏览器和打包工具,支持tree-shaking * - umd (Universal Module Definition): 通用模块定义,同时支持浏览器、Node.js和AMD加载器 * - iife (Immediately Invoked Function Expression): 自执行函数,适合作为<script>标签直接在浏览器中使用 */ exports.OUTPUT_FORMATS = process.env.FORMAT ? [process.env.FORMAT] // 如果设置了FORMAT环境变量,只输出指定格式 : ['cjs', 'es']; // 否则使用默认值 /** * 是否生成类型声明文件 * @type {boolean} */ exports.GENERATE_TYPES = process.env.FORMAT !== 'umd' && process.env.FORMAT !== 'iife'; /** * UMD/IIFE格式下的全局变量名,默认为驼峰式包名 * @type {string} */ exports.GLOBAL_NAME = pkg.name.replace(/-([a-z])/g, (_, letter) => letter.toUpperCase()); /** * 外部依赖,这些依赖不会被打包 * @type {string[]} */ exports.EXTERNAL = []; /** * 入口文件路径 * @type {string} */ exports.INPUT_FILE = './src/index.ts'; /** * CSS/SCSS配置 * @type {Object} */ exports.CSS_CONFIG = { // 是否启用CSS/SCSS处理 enabled: true, // 是否将CSS提取为单独的文件,false表示注入到JS中 extract: false, // 是否压缩CSS minimize: true, // CSS模块化,设为true会将类名转换为哈希值,避免样式冲突 modules: false, // 是否使用Sass预处理器 sass: true, // 自动添加浏览器前缀 autoPrefix: true, // 提取的CSS文件名 fileName: 'styles.css' }; // ============= 以下是内部配置,通常不需要修改 ============= /** * 构建输出的横幅信息 * @type {string} */ exports.BANNER = [ '/*!', ` * ${pkg.name} v${pkg.version}`, ` * ${pkg.description}`, ` * Copyright (c) ${pkg.author}.`, ` * This source code is licensed under the ${pkg.license} license.`, ' */' ].join('\n'); /** * 获取输出文件路径 * @param {string} format 打包格式 * @returns {string} 输出文件路径 */ exports.getOutputFile = function(format) { switch (format) { case 'cjs': return pkg.common || './dist/index.js'; case 'es': return pkg.module || './dist/index.mjs'; case 'umd': return './dist/index.umd.js'; case 'iife': return './dist/index.min.js'; case 'types': return pkg.typings || './types/index.d.ts'; default: return `./dist/index.${format}.js`; } } /** * 是否为生产环境 * @type {boolean} */ exports.IS_PRODUCTION = process.env.NODE_ENV === 'production';