Skip to content

Commit

Permalink
feat: move fuseModule to build:before setup
Browse files Browse the repository at this point in the history
  • Loading branch information
YunYouJun committed Feb 24, 2024
1 parent efd48e3 commit 62ba565
Show file tree
Hide file tree
Showing 6 changed files with 60 additions and 46 deletions.
2 changes: 1 addition & 1 deletion demo/yun/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
},
"type": "module",
"scripts": {
"build": "npm run fuse && npm run build:ssg",
"build": "npm run build:ssg",
"build:spa": "valaxy build",
"build:ssg": "valaxy build --ssg --log=info",
"dev": "nodemon --exec \"valaxy . --port 4860\"",
Expand Down
6 changes: 3 additions & 3 deletions docs/pages/guide/third-party/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ aplayer: true
Valaxy 内置了基于 [fuse.js](https://fusejs.io/) 的离线搜索(须预先通过 `valaxy fuse` 构建生成本地缓存)。

> `valaxy fuse` 默认将 `fuse` 生成在 `public` 目录下,并在 `.gitignore` 中添加 `public/valaxy-fuse-list.json` 忽略。
> 请在 `valaxy build` 之前使用 `valaxy fuse` 构建
> 在执行 `valaxy build` 之前,会自动执行 `valaxy fuse`
如果你想要使用全文搜索,可参考 [Options | fuse.js](https://www.fusejs.io/api/options.html) 进行设置。
譬如:
Expand Down Expand Up @@ -58,7 +58,7 @@ export default defineSiteConfig({
Valaxy has built-in local search based on [fuse.js](https://fusejs.io/). The local cache should be generated in advance via `valaxy fuse`.

> `valaxy fuse` generates `fuse` in the `public` directory by default.
> Please use `valaxy fuse` before `valaxy build`.
> When executing `valaxy build`, `valaxy fuse` will be executed automatically.
:::

#### 使用 {lang="zh-CN"}
Expand Down Expand Up @@ -108,7 +108,7 @@ export default defineSiteConfig({
"theme": "yun"
},
"scripts": {
"build": "npm run fuse && npm run build:ssg",
"build": "npm run build:ssg",
"build:ssg": "valaxy build --ssg",
"fuse": "valaxy fuse",
"rss": "valaxy rss"
Expand Down
8 changes: 8 additions & 0 deletions packages/valaxy/node/cli/build.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import type { ValaxyModule } from '../modules'
import { setupModules } from '../modules'
import { rssModule } from '../modules/rss'
import { isPagesDirExist, setEnvProd } from '../utils/env'
import { fuseModule } from '../modules/fuse'
import { printInfo } from './utils/cli'
import { commonOptions } from './options'

Expand Down Expand Up @@ -54,9 +55,12 @@ export function registerBuildCommand(cli: yargs.Argv) {

const valaxyApp = createValaxyNode(options)
// resolve options and create valaxy app
consola.start(`Run ${yellow('options:resolved')} hooks`)
await valaxyApp.hooks.callHook('options:resolved')

const modules: ValaxyModule[] = []
if (options.config.siteConfig.search.type === 'fuse')
modules.push(fuseModule)
if (options.config.modules.rss.enable)
modules.push(rssModule)

Expand All @@ -81,11 +85,14 @@ export function registerBuildCommand(cli: yargs.Argv) {
} as InlineConfig,
)
// init config
consola.start(`Run ${yellow('config:init')} hooks`)
await valaxyApp.hooks.callHook('config:init')

// before build
consola.start(`Run ${yellow('build:before')} hooks`)
await valaxyApp.hooks.callHook('build:before')

consola.box('🌠 Start building...')
try {
if (ssg) {
consola.info(`use ${yellow('vite-ssg')} to do ssg build...`)
Expand Down Expand Up @@ -114,6 +121,7 @@ export function registerBuildCommand(cli: yargs.Argv) {
// await fs.copyFile(templatePath, indexPath)

// after build
consola.start(`Run ${yellow('build:after')} hooks`)
await valaxyApp.hooks.callHook('build:after')
}
},
Expand Down
13 changes: 6 additions & 7 deletions packages/valaxy/node/cli/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,13 @@ import yargs from 'yargs'
import { hideBin } from 'yargs/helpers'
import { version } from '../../package.json'

// build

// rss
import { rssModule } from '../modules/rss'
// modules
import type { ValaxyModule } from '../modules'
import { fuseModule } from './fuse'
import { registerNewCommand } from './new'
import { rssModule } from '../modules/rss'
import { fuseModule } from '../modules/fuse'

// commands
import { registerNewCommand } from './new'
import { registerBuildCommand } from './build'
import { registerDevCommand } from './dev'

Expand All @@ -27,8 +26,8 @@ registerBuildCommand(cli)
registerNewCommand(cli)

const modules: ValaxyModule[] = [
rssModule,
fuseModule,
rssModule,
]

modules.forEach((module) => {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,8 @@ import type { Argv } from 'yargs'
import type { FuseListItem } from 'valaxy/types'
import { resolveOptions } from '../options'
import { setEnvProd } from '../utils/env'
import { defineValaxyModule } from '../modules'
import { commonOptions } from './options'
import { commonOptions } from '../cli/options'
import { defineValaxyModule } from '.'

/**
* @description Generate Fuse List Data for Search
Expand Down Expand Up @@ -59,7 +59,42 @@ export async function generateFuseList(options: ResolvedValaxyOptions) {
}

/**
* valaxy fuse
* fuse main logic
*/
export async function execFuse(options: ResolvedValaxyOptions) {
consola.info('Start generate fuse list...')
const fuseList = await generateFuseList(options)

await fs.ensureDir('./dist')
const publicFolder = path.resolve(options.userRoot, 'public')
const publicFuseFile = path.resolve(publicFolder, options.config.siteConfig.fuse.dataPath)
const publicRelativeFile = path.join('public', options.config.siteConfig.fuse.dataPath)

await fs.ensureFile(publicFuseFile)
fs.writeJSONSync(publicFuseFile, fuseList)
consola.success(`Generate fuse list in ${dim(publicFolder)}`)

// copy to dist
const distFolder = path.resolve(options.userRoot, 'dist')
const distFuseFile = path.resolve(distFolder, options.config.siteConfig.fuse.dataPath)
await fs.ensureDir(distFolder)
fs.writeJSONSync(distFuseFile, fuseList)
consola.success(`Generate fuse list in ${dim(distFolder)}`)

try {
const gitignorePath = path.resolve(options.userRoot, '.gitignore')
const gitignore = await fs.readFile(gitignorePath, 'utf-8')
const ignorePath = publicRelativeFile.replace(/\\/g, '/')
if (!gitignore.includes(ignorePath)) {
await fs.appendFile(gitignorePath, `\n# valaxy fuse\n${ignorePath}\n`)
consola.success(`Add ${dim(ignorePath)} to ${dim('.gitignore')}`)
}
}
catch { }
}

/**
* valaxy fuse (will auto generate before build)
* @param cli
*/
export function registerFuseCommand(cli: Argv<object>) {
Expand All @@ -70,38 +105,9 @@ export function registerFuseCommand(cli: Argv<object>) {
.strict()
.help(),
async ({ root }) => {
consola.info('Please generate it before build.')

setEnvProd()
const options = await resolveOptions({ userRoot: root }, 'build')
const fuseList = await generateFuseList(options)

await fs.ensureDir('./dist')
const publicFolder = path.resolve(options.userRoot, 'public')
const publicFuseFile = path.resolve(publicFolder, options.config.siteConfig.fuse.dataPath)
const publicRelativeFile = path.join('public', options.config.siteConfig.fuse.dataPath)

await fs.ensureFile(publicFuseFile)
fs.writeJSONSync(publicFuseFile, fuseList)
consola.success(`Generate fuse list in ${dim(publicFolder)}`)

// copy to dist
const distFolder = path.resolve(options.userRoot, 'dist')
const distFuseFile = path.resolve(distFolder, options.config.siteConfig.fuse.dataPath)
await fs.ensureDir(distFolder)
fs.writeJSONSync(distFuseFile, fuseList)
consola.success(`Generate fuse list in ${dim(distFolder)}`)

try {
const gitignorePath = path.resolve(options.userRoot, '.gitignore')
const gitignore = await fs.readFile(gitignorePath, 'utf-8')
const ignorePath = publicRelativeFile.replace(/\\/g, '/')
if (!gitignore.includes(ignorePath)) {
await fs.appendFile(gitignorePath, `\n# valaxy fuse\n${ignorePath}\n`)
consola.success(`Add ${dim(ignorePath)} to ${dim('.gitignore')}`)
}
}
catch {}
await execFuse(options)
},
)
}
Expand All @@ -112,8 +118,8 @@ export const fuseModule = defineValaxyModule({
},

setup(node) {
node.hook('build:before', () => {
generateFuseList(node.options)
node.hook('build:before', async () => {
await execFuse(node.options)
})
},
})
1 change: 1 addition & 0 deletions pnpm-lock.yaml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

0 comments on commit 62ba565

Please sign in to comment.