bazelbuild / rules_postcss

PostCSS rules for Bazel
Apache License 2.0
10 stars 13 forks source link

Avoid double-specifying plugins #19

Closed rzhw closed 4 years ago

rzhw commented 4 years ago

If #17 is resolved, we'll start writing this:

Currently plugins are double-specified with their defs:

postcss_plugin(
    name = "list_selectors",
    node_require = "build_bazel_rules_postcss/examples/additional_outputs/list-selectors.js",
    srcs = [
        "list-selectors.js",
    ],
)

postcss_binary(
    name = "style_processed",
    src = "style.css",
    plugins = {
        ":list_selectors": "[{markdownDir: 'examples/additional_outputs'}]",
    },
    additional_outputs = ["selectors.md"],
    deps = [
        ":list_selectors",
    ],
)

We could do one better by not needing to specify :list_selectors in the deps attribute:

postcss_plugin(
    name = "list_selectors",
    node_require = "build_bazel_rules_postcss/examples/additional_outputs/list-selectors.js",
    srcs = [
        "list-selectors.js",
    ],
)

postcss_binary(
    name = "style_processed",
    src = "style.css",
    plugins = {
        ":list_selectors": "[{markdownDir: 'examples/additional_outputs'}]",
    },
    additional_outputs = ["selectors.md"],
)

This would likewise apply for things we get from npm:

postcss_plugin(
    name = "autoprefixer",
    node_require = "autoprefixer",
)

postcss_plugin(
    name = "unquote",
    node_require = "build_bazel_rules_postcss/examples/custom_plugin/unquote.js",
    srcs = [
        "unquote.js",
    ],
)

sass_binary(
    name = "style",
    src = "style.scss",
    output_style = "expanded",
)

postcss_binary(
    name = "style_processed",
    src = ":style",
    plugins = {
        ":autoprefixer": "[{ browsers: '%s' }]" % AUTO_PREFIXER_BROWSERS,
        ":unquote": "",
    },
    deps = [
        ":unquote",
        "@npm//autoprefixer",
    ],
)

Would become something like this:

postcss_plugin(
    name = "autoprefixer",
    node_require = "autoprefixer",
    deps = [
        "@npm//autoprefixer",
    ],
)

postcss_plugin(
    name = "unquote",
    node_require = "build_bazel_rules_postcss/examples/custom_plugin/unquote.js",
    srcs = [
        "unquote.js",
    ],
)

sass_binary(
    name = "style",
    src = "style.scss",
    output_style = "expanded",
)

postcss_binary(
    name = "style_processed",
    src = ":style",
    plugins = {
        ":autoprefixer": "[{ browsers: '%s' }]" % AUTO_PREFIXER_BROWSERS,
        ":unquote": "",
    },
)