在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】即可。

    image.png

    改动代码为buildWithArgs中的foreach语句,增加一些过滤条件
    例如笔者的代码中增加过滤tmp文件夹和.gitignore文件
    image.png

    整段方法代码段如下:

    1. async function buildWithArgs(answers) {
    2. let debugTemp = jsUtil.GetDebugTempPath(true);
    3. fsEx.removeSync(debugTemp)
    4. let curDir = process.cwd()
    5. let buildDir = curDir
    6. if (projectCfg.scripts && typeof projectCfg.scripts.build == 'string') {
    7. let buildCmd = projectCfg.scripts.build.trim();
    8. if (buildCmd.includes("vue-cli-service")) {
    9. buildDir = require('./buildvue')(answers)
    10. } else if (buildCmd.includes("react-scripts")) {
    11. buildDir = require('./buildreact')(answers)
    12. }
    13. }
    14. let publishRoot = path.resolve(curDir, jsUtil.GetPublishDir());
    15. fsEx.removeSync(publishRoot);
    16. let buildRoot = path.resolve(curDir, buildDirectory);
    17. let distPath = buildRoot
    18. if (answers.pluginType == "offline")
    19. distPath = path.resolve(buildRoot, `${projectCfg.name}_${projectCfg.version}`)
    20. fsEx.removeSync(buildRoot)
    21. fs.readdir(buildDir, (_, files) => {
    22. files.forEach(file => {
    23. if (file != buildDirectory && file != "node_modules" && file != "tmp" && file != ".gitignore" &&
    24. file != ".vscode" && file != ".git" &&
    25. file != "package.json" && file != "package-lock.json") {
    26. const srcPath = path.resolve(buildDir, file)
    27. fsEx.copySync(srcPath, path.resolve(distPath, file))
    28. }
    29. })
    30. if (answers.pluginType == "offline") {
    31. let path7z = path.resolve(buildRoot, `${projectCfg.name}.7z`)
    32. _7z.pack(distPath, path7z, err => {
    33. fsEx.removeSync(distPath)
    34. })
    35. }
    36. })
    37. console.log(chalk.cyan(`\n==>> 编译成功。请将目录${buildDirectory}下的文件署到服务器...`))
    38. }