返回公众号历史文章目录

文章 / 公众号历史文章

【WPSJS开发】WPSJS项目生成时自定义输出文件、文件夹效果

在WPSJS项目开发好,需要发布给用户使用时,我们使用其命令wpsjs build或wpsjs publish,进行项目的文件打包发布时,默认wpsjs工具会对某些文件和文件夹进行过滤不打包。 但可能我们自己有一些其他临时测试文件、文件夹,我们运行wpsjs build或wpsjs publish,

在WPSJS项目开发好,需要发布给用户使用时,我们使用其命令wpsjs build或wpsjs publish,进行项目的文件打包发布时,默认wpsjs工具会对某些文件和文件夹进行过滤不打包。

但可能我们自己有一些其他临时测试文件、文件夹,我们运行wpsjs build或wpsjs publish,它也将其打包到发布内容中,这样子不太合适,手动再转移、删除也麻烦。

可以直接修改其wpsjs工具源代码解决这个问题。

wpsjs源代码,可以搜索本地目录,例如笔者以wpsjs build创建plugins模式的发布项目为例,publish也同理。

关键字【wpsjs build.js】搜索本地文件,可发现总共两个文件,

经测试,只需要改动第1个文件【C:\Users\Administrator\AppData\Roaming\npm\node_modules\wpsjs\src\lib\build.js】即可。

公众号文章插图

改动代码为buildWithArgs中的foreach语句,增加一些过滤条件:

例如笔者的代码中增加过滤tmp文件夹和.gitignore文件

公众号文章插图

整段方法代码段如下:

async function buildWithArgs(answers) {  
    let debugTemp = jsUtil.GetDebugTempPath(true);  
    fsEx.removeSync(debugTemp)  
    let curDir = process.cwd()  
    let buildDir = curDir  
    if (projectCfg.scripts && typeof projectCfg.scripts.build == 'string') {  
        let buildCmd = projectCfg.scripts.build.trim();  
        if (buildCmd.includes("vue-cli-service")) {  
            buildDir = require('./buildvue')(answers)  
        } else if (buildCmd.includes("react-scripts")) {  
            buildDir = require('./buildreact')(answers)  
        }  
    }  
    let publishRoot = path.resolve(curDir, jsUtil.GetPublishDir());  
    fsEx.removeSync(publishRoot);  
    let buildRoot = path.resolve(curDir, buildDirectory);  
    let distPath = buildRoot  
    if (answers.pluginType == "offline")  
        distPath = path.resolve(buildRoot, `${projectCfg.name}_${projectCfg.version}`)  
    fsEx.removeSync(buildRoot)  
    fs.readdir(buildDir, (_, files) => {  
        files.forEach(file => {  
            if (file != buildDirectory && file != "node_modules" && file != "tmp" && file != ".gitignore" &&  
                file != ".vscode" && file != ".git" &&  
                file != "package.json" && file != "package-lock.json") {  
                const srcPath = path.resolve(buildDir, file)  
                fsEx.copySync(srcPath, path.resolve(distPath, file))  
            }  
        })  
        if (answers.pluginType == "offline") {  
            let path7z = path.resolve(buildRoot, `${projectCfg.name}.7z`)  
            _7z.pack(distPath, path7z, err => {  
                fsEx.removeSync(distPath)  
            })  
        }  
    })  
    console.log(chalk.cyan(`\n==>>  编译成功。请将目录${buildDirectory}下的文件署到服务器...`))  
}