使用 Grunt 中特定文件夹的标志进行构建

Using a flag for a specific folder in Grunt to build from

我现在想知道在 运行ning G运行t 时是否可以从某个文件夹加载某些文件。

假设我的文件夹结构如下所示:

[html]
[css]
[js]
[custom]
    [X] x.css
    [Y] y.css
    [Z] z.css

我正在尝试为客户 [X] 构建我的网站,需要将一些自定义 css 添加到他们的 x.css 文件中,然后加载该文件进行测试。

我希望能够做的是 运行 我的 g运行t 任务(现在它 运行s sass,jsx 编译器和启动带有 livereload 的本地主机服务器)并说 g运行t client-x.

然后将加载我的 x.css 文件和该文件夹的所有内容,但根本不使用触摸 [Y] 和 [Z] 文件夹。

任务 运行ner 这可能吗?

所以我查看了 ,它最初似乎解决了我的问题,但我无法真正让它按照我想要的方式工作,它混淆了我现有的 g运行t 任务我已经设置好了。

但后来我发现grunt options——这个参数解决了我所有的问题。 G运行t 文件如下:

module.exports = function(grunt) {

          var theme = grunt.option('theme')

          grunt.initConfig({
              concat: {
                  options: {
                      separator: 'rn'
                  },
                  dist: {
                    files: {
                        'js/script.js': 'themes/' + theme + '/js/custom.js'
                    }
                  }
              },
              watch: {
                  sass: {
                    files: ['themes/' + theme + '/**/*.{scss,sass}', 'themes/' + theme + '/_partials/**/*.{scss,sass}', 'sass/**/*.{scss,sass}', 'sass/_partials/**/*.{scss,sass}', 'themes/' + theme + '/js/custom.js'],
                    tasks: ['sass:dist', 'shell:upload', 'concat:dist'],
                    options: {
                      livereload: true,
                    },
                  },
                  livereload: {
                    files: ['*.vm', 'js/*.{js,json}', 'css/*.css','images/*.{png,jpg,jpeg,gif,webp,svg}', 'themes/' + theme + '/js/custom.js'],
                    options: {
                        livereload: true,
                        debounceDelay: 2000
                    }
                  }
              },
              sass: {
                options: {
                    sourceMap: true,
                    outputStyle: 'nested'
                },
                dist: {
                    files: {
                        'css/lyria.css': 'themes/' + theme + '/styles.scss'
                    }
                }
              },
              shell: {
                options: {
                  stdout: true,
                  stderr: true
                },
                upload: {
                  command: './theme-uploader.sh'
                }
              },
            })

            grunt.loadNpmTasks('grunt-contrib-concat');
            grunt.loadNpmTasks('grunt-contrib-watch');
            grunt.loadNpmTasks('grunt-sass');
            grunt.loadNpmTasks('grunt-shell');

            grunt.registerTask('default', [
                'sass:dist',
                'concat',
                'shell:upload',
                'watch'
            ]);

        };

如您所见,主题参数用作 g运行t 默认任务的参数,然后将正确的文件编译到正确的位置。当我 运行 g运行t --theme=x 它监视并编译由我的不同任务设置的特定目录中的相应文件夹。

此设置的原因是我正在为同一存储库中的不同客户端开发和维护不同的子主题。我需要能够使用相应的样式表和自定义 js 生成特定于客户端的 jar。

这样我就可以将所有目录保存在同一个存储库中,并且只需指定 运行 执行 g运行t 任务时从哪个客户端文件夹中获取 css。