0

我在 Nuxtjs 2.15.4 上,我正在尝试为我的应用程序创建多个主题。

流程非常简单:我有一个themes文件夹,里面有我的主题文件夹。在 nuxt build/dev 将调用一个模块:

const path = require('path')
const chokidar = require('chokidar');
const fse = require('fs-extra');

export default async function (moduleOptions) {
    // moduleOptions.themeName = 'newtheme' &  moduleOptions.customizeTheme = 'false'
    const themeName = moduleOptions.themeName
    const defaultThemeDir = path.join(this.options.rootDir, './themes/main')
    const newThemeDir = path.join(this.options.rootDir, './themes/'+moduleOptions.themeName)
    const sourceDir = path.join(this.options.rootDir, './')
    const emptySourceDir = async () => {
        fse.emptyDir(path.join(this.options.rootDir, 'assets'))
        fse.emptyDir(path.join(this.options.rootDir, 'components'))
        fse.emptyDir(path.join(this.options.rootDir, 'layouts'))
        fse.emptyDir(path.join(this.options.rootDir, 'middleware'))
        fse.emptyDir(path.join(this.options.rootDir, 'pages'))
        fse.emptyDir(path.join(this.options.rootDir, 'plugins'))
        fse.emptyDir(path.join(this.options.rootDir, 'static'))
    }
    const copyThemesDirectory = async () => {
        await fse.copy(path.join(defaultThemeDir, 'base'), sourceDir)
        if(themeName !== 'main'){
            await fse.copy(path.join(newThemeDir, 'base'), sourceDir)
        }
        if(moduleOptions.customizeTheme === 'true'){
            await fse.copy(path.join(newThemeDir, 'custom'), sourceDir)
        }
    }
    const toTargetPath = (oldPath) => {
        let newPath = oldPath.replace(this.options.rootDir, '')
        .replace('\\themes\\main\\base\\', '\\')
        .replace('\\themes\\main\\custom\\', '\\')
        .replace('\\themes\\'+themeName+'\\base\\', '\\')
        .replace('\\themes\\'+themeName+'\\custom\\', '\\')
        return path.join(this.options.rootDir, newPath)
    }

    await emptySourceDir()
    await copyThemesDirectory()

    if(process.env.NODE_ENV === 'development'){
        chokidar.watch([defaultThemeDir, newThemeDir]).on('all', async (event, filePath) => {
            if (event === 'add' || event === 'change') {
                fse.copy(filePath, toTargetPath(filePath))
            }
            if (event === 'unlink') {
                fse.remove(toTargetPath(filePath))
            }
        })
    }
}

它将清空 nuxt 根目录中的一些文件夹,然后复制themes/main/base到其中。之后它将检查主题名称是否不是“main”,它将复制themes/{themeName}/base到根目录中。然后它将检查自定义选项,如果为真,它将theme/{themeName}/custom文件夹复制到根目录。

这部分完成没有问题!第二部分是development模式,给我这样的文件(添加到新主题或自定义的新文件)不存在的错误。

该部分在chokidar观看我的主题文件夹的帮助下,如果有任何更改,它将删除或复制根目录中的内容。如果主主题基础文件夹中存在相同的文件,则会显示错误。

我什至尝试fse.copy(filePath, toTargetPath(filePath),{overwrite: true})fse.copySync(filePath, toTargetPath(filePath),{overwrite: true})

这是一个错误示例:

错误 ENOENT:没有这样的文件或目录,取消链接 '{my-local-directory}\components\global\footer\sub\links.vue'

有谁知道它有什么问题??即使只是从主题复制到根目录,它也可以在第一次尝试时运行手表change或部件。add

#更新

看起来即使在构建中也有错误。我建造,它给了我

Error: ENOENT: no such file or directory, mkdir '/var/www/static/images/folder'

然后在我构建它时再次运行而没有错误。这是我的主题文件夹结构:

-themes
|__ main
|   |__base
|   |   |__assets
|   |   |__components
|   |   |__middleware
|   |   |__layouts
|   |   |__pages
|   |   |__plugins
|   |   |__static
|   |
|   |__custom
|
|__ newtheme
    |__base
    |__custom
4

0 回答 0