Skip to content

Commit

Permalink
perf(core): Extract default configuration & Sass default configuration
Browse files Browse the repository at this point in the history
  • Loading branch information
Meqn committed Dec 3, 2023
1 parent 3f94c98 commit 4ac1e7a
Show file tree
Hide file tree
Showing 3 changed files with 42 additions and 13 deletions.
36 changes: 36 additions & 0 deletions packages/core/base/defaults.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
const htmlMinifyOptions = {
collapseWhitespace: true, //移除多余空白
removeComments: true, //移除注释
// removeRedundantAttributes: true, //移除默认值的属性
removeEmptyAttributes: true, //移除空的属性
// removeAttributeQuotes: true, //移除属性值周围的引号,仅在可能的情况下使用
collapseBooleanAttributes: true, //当属性值为布尔类型时,移除属性值,仅保留属性名称
minifyJS: true, //使用terser来压缩内联JavaScript代码
minifyCSS: true //使用clean-css压缩内联CSS代码
}

// !警告: sass@2.x以后该配置无效
const sassDefaultOptions = {
includePaths: ['node_modules'], //支持加载npm包
importer: [
// 支持以 `~` 开头的 npm包
function (url, prev, done) {
url = url.startsWith('~') ? url.substr(1) : url;
if (typeof done === 'function') {
done({ file: url })
} else {
return { file: url }
}
}
],
importers: [
{
findFileUrl: url => findUrlFromNpm(url, '~')
}
]
}

module.exports = {
htmlMinifyOptions,
sassDefaultOptions
}
13 changes: 2 additions & 11 deletions packages/core/build/html.js
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ const {
} = require('@pipflow/utils')

const { pipeline, onDone } = require('../base/utils')
const { htmlMinifyOptions } = require('../base/defaults')
const { revDir, createSrcOptions, outputFiles, plumber, putProcesses } = require('./comm')

/**
Expand Down Expand Up @@ -110,17 +111,7 @@ module.exports = function htmlTask(options = {}, done) {

// 8. 压缩处理
if (htmlMinify) {
const minifyOptions = Object.assign({
collapseWhitespace: true, //移除多余空白
removeComments: true, //移除注释
// removeRedundantAttributes: true, //移除默认值的属性
removeEmptyAttributes: true, //移除空的属性
// removeAttributeQuotes: true, //移除属性值周围的引号,仅在可能的情况下使用
collapseBooleanAttributes: true, //当属性值为布尔类型时,移除属性值,仅保留属性名称
minifyJS: true, //使用terser来压缩内联JavaScript代码
minifyCSS: true //使用clean-css压缩内联CSS代码
}, _.isPlainObject(htmlMinify) ? htmlMinify : {})

const minifyOptions = Object.assign({}, htmlMinifyOptions, _.isPlainObject(htmlMinify) ? htmlMinify : {})
processes.push(htmlMinifier(minifyOptions))
}

Expand Down
6 changes: 4 additions & 2 deletions packages/core/build/style.js
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ const {
} = require('@pipflow/utils')

const { pipeline, onDone } = require('../base/utils')
const { sassDefaultOptions } = require('../base/defaults')
const {
createSrcOptions,
outputFiles,
Expand All @@ -44,7 +45,7 @@ module.exports = function styleTask(options = {}, done) {
const srcOptions = createSrcOptions(options)
const basePath = getBasePath(input, options.base || '.') //合并文件后的基础路径
const cssFilter = filter('**/*.css', { restore: true })

/**
* 统一入口方式 (input支持 `string`, `array`, `object`)
* 流程分开处理 为了解决合并文件的问题
Expand Down Expand Up @@ -84,7 +85,8 @@ module.exports = function styleTask(options = {}, done) {

// 5.2 CSS预处理器
if (compiler === 'sass' || compiler === 'scss') {
baseProcesses.push(sass(compilerOptions?.preprocessorOptions || {}).on('error', sass.logError))
const _sassOptions = Object.assign({}, sassDefaultOptions, compilerOptions?.preprocessorOptions)
baseProcesses.push(sass(_sassOptions).on('error', sass.logError))
} else if (compiler === 'less') {
baseProcesses.push(less(compilerOptions?.preprocessorOptions || {}))
} else if (compiler === 'stylus') {
Expand Down

0 comments on commit 4ac1e7a

Please sign in to comment.