【问题标题】:gulp-uncss removes class which is added using javascriptgulp-uncss 删除使用 javascript 添加的类
【发布时间】:2016-04-10 16:47:10
【问题描述】:

我对 gulp-uncss 的 gulp 配置是

gulp.task('uncssme', function () {

return gulp.src('src/css/**/*.css')
    .pipe(uncss({
        html: ['src/**/*.html']
    }))
    .pipe(gulp.dest('dist/css'))
});

使用 uncss 会从最终的 css 文件中删除“newClass”选择器,因为该类不是直接在 .html 文件中使用,而是通过 js 动态添加的。

document.getElementById('good').className += ' newClass';

编辑: 我已经在使用 /* uncss:ignore */ 来使其工作,但是每次为 .js 中存在的类而不是 .html 中的类添加此注释是没有意义的

【问题讨论】:

  • @Guy 否决了这个问题,请理解。如果您通过添加 cmets 对改善问题没有任何帮助,请不要盲目投票。
  • 没有投反对票,但我可以理解他们为什么投反对票。你read the documentation,特别是下面说明“[忽略]特定选择器”的sn-p吗?
  • 我已经在使用 /* uncss:ignore */ 关注 [ignoring] 东西。而且他们的问题跟踪响应非常差。此外,为每个新添加的选择器设置忽略是不必要的,而且比减轻任务负担更重。我宁愿去其他插件。你认为呢?有更好的插件,请推荐。
  • 我希望可以,但我从未尝试过这种性质的任何事情。通过 js 添加的任何类都需要被列入白名单是有道理的。他们也可以让任务扫描 js 文件,但这并没有考虑到 $(this).addClass('brand-' + userColor) 之类的东西。
  • 是的,我在想如果一些与 uncss 同步的 js 解析可以使它工作。但无论如何,谢谢。奇怪的是我无法在网上的其他任何地方找到类似的查询。

标签: javascript html css gulp gulp-uncss


【解决方案1】:

也许,您可以仅在 js 中使用 is- 为每个类添加前缀,并在 gulp 任务中添加带有正则表达式的忽略选项。

gulp.task('uncssme', function () {

return gulp.src('src/css/**/*.css')
    .pipe(uncss({
        html: ['src/**/*.html'],
        ignore: [^\.is-.*]
    }))
    .pipe(gulp.dest('dist/css'))
});

【讨论】:

  • 哦,太好了。谢谢。我在添加 purifyjs 时仍然遇到一些问题,如上一个答案中所建议的那样。但是您的解决方案似乎也很划算,因为我可以在仅由 js 添加的类中添加类似 jsa(js added) 的前缀。
  • 我刚刚尝试了正则表达式,但它不起作用,很奇怪但硬编码文字,如忽略:['.is-newClass'] 工作:P
  • 正则表达式将像 ignore: [^\.is-.*] 一样使用,即数组内不带引号。然后就可以了。
【解决方案2】:

我在使用 Uncss 时遇到了同样的问题,唯一的方法是使用忽略 cmets,我认为这不是很好的解决方案。

我建议你试试 purifycss 插件 (https://www.npmjs.com/package/gulp-purifycss/)。 您可以设置 html 和 js 文件,然后 css 是 uncss-ed 或 purify-ed,这就是我遇到问题时所寻找的。

【讨论】:

  • 啊谢谢。我只知道名字,但完全忘记探索它。现在,在使用它时,我收到 TypeError: Cannot read property 'slice' of undefined。但我会调查一下。 :)
  • 好的,该错误已解决,但它似乎没有运行甚至简单的情况,即删除一个未在任何地方使用的类选择器。如果这不起作用,我无法进一步检查它是否保持通过 js 添加类。
  • 我的 gulp 是:gulp.task('purifycss', function () { return gulp.src('src/bundle/css/**/*.css') .pipe(purify([ 'src/bundle/js/**/*.js', 'src/**/*.html'])) .pipe(gulp.dest('src/bundle/css')) });
  • 这是我的,100% 工作并用于生产:gulp.task('compile:css', ['clear:dist'], function () { return gulp.src('./ src/static/scss/style.scss') .pipe(sourcemaps.init()) .pipe(sass().on('error', sass.logError)) .pipe(purify(['./src/static /js/*.js', './src/*.html'])) .pipe(autoprefixer({ browsers: ['last 10 versions', 'IE 7'] })) .pipe(csscomb()) .pipe(cleanCSS()) .pipe(sourcemaps.write('./maps/')) .pipe(gulp.dest('./dist/static/css/')) });
  • 在你给出配置后,我对我和你的配置进行了试验。这是我的观察。奇怪的事情。如果我在 css '.js-newClass' 和 '.newClass1' 中有 2 个选择器,并且只有前者是通过 js 添加的。所以 purifycss 仍然保留 '.newClass1' 因为字符串匹配 'newClass' 这就是为什么我的配置看起来不起作用的原因。更多情况下,如果它是 '.newClassA',那么它将删除它,因为它认为 'newClass' 和 'newClass(number)' 相同。 '.js-newClass-hello' 和 '.newClass1' 也被视为相同。因此,即使 '.newClass1' 没有在任何地方使用,它也保留了两者。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-01
  • 1970-01-01
  • 2023-03-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多