笑尘天雨 发表于 2022-9-26 23:33:12

voeoc 发表于 2022-9-13 23:34
尝试用了下,感觉非常好用,只是希望加一些强迫症选项

1.就是之前说的可以强制使用现有的头,不用修改了; ...

或许可以尝试用typescript对它解析再写一套逻辑?也不是做不到,到国庆了再搞吧

voeoc 发表于 2022-9-27 13:48:07

笑尘天雨 发表于 2022-9-26 23:12
rollup内置的acron不支持解析ts,难道要再使用个别的ast解析?脑壳疼

我后面还是用回正则了,集成gulp+rollup,在gulp流提取入口文件header,然后直接附加到打包完毕的文件就行。
方案比较简单,不会和现有的rollup配置冲突,而且文件只需读写一遍。
大概这样,可以参考下
import commonConf from './rollup.config.js';
gulp.task('rollup', function () {
    const REGEXP_STR_HEAD_END = `\\/\\/[\\t ]*==\\/UserScript==(\\r\\n|\\r|\\n)`
    const REGEXP_USER_HEADER = new RegExp(
      `\\/\\/[\\t ]*==UserScript==(\\r\\n|\\r|\\n)((?!${REGEXP_STR_HEAD_END}).)*` +
      REGEXP_STR_HEAD_END, "gms");
    let userHeader = "";

    return gulp.src(commonConf.input)
      .on("data", function (file) {
            // 提取入口文件的header
            userHeader = file.contents.toString().match(REGEXP_USER_HEADER)?.at(0) || "";
            return file.contents;
      })
      .pipe(gulpStreamRollup(commonConf))
      .on("data", function (file) {
            // 还原header
            const finalOutput = userHeader + "\n" + file.contents.toString();
            return file.contents = Buffer.from(finalOutput);
      })
      .pipe(rename(fileInfo.outputFullName))
      .pipe(gulp.dest(fileInfo.buildDir));
});
我的需求比较简单,就是打包完我的header不变就行。如果是类似这种需要自动生成所有header的,其实感觉要不要做gulp插件更好,因为考虑的东西可以更少,rollup就单纯作为一个打包。

笑尘天雨 发表于 2022-9-27 14:34:37

voeoc 发表于 2022-9-27 13:48
我后面还是用回正则了,集成gulp+rollup,在gulp流提取入口文件header,然后直接附加到打包完毕的文件就 ...

明白了,那确实有些不一样。
我要做的是要提取所有符合条件的注释,所以还是得用解析才能完成。而且还要分辨出来哪一块是开头的注释,要想做到开头注释和开头代码的区分就必须用ast语法树来做才行。不过我想到了个好办法,那就是只要我这个插件集成了cleanup那么就不需要cleanup插件了,自然也能做到既能ast还能删除注释两不耽误而且可以直接拿typescript处理好的代码这样也不需要担心不兼容ts的问题,真是一举三得的好办法

笑尘天雨 发表于 2022-10-3 22:27:42

voeoc 发表于 2022-9-27 13:48
我后面还是用回正则了,集成gulp+rollup,在gulp流提取入口文件header,然后直接附加到打包完毕的文件就 ...

想来想去确实是无解了。不过咱路子野,咱自己写了一个专门提取头部注释的方法。现在已经更新到0.1.7了。可以直接使用target:fix-header就行,或者只使用里面的方法提取头部自行处理也行的。

voeoc 发表于 2022-10-4 12:41:51

笑尘天雨 发表于 2022-10-3 22:27
想来想去确实是无解了。不过咱路子野,咱自己写了一个专门提取头部注释的方法。现在已经更新到0.1.7了。 ...

老哥可以的,感觉rollup打包油猴应该是趋势,输出的代码比webpack干净多了。但现在rollup用的人少,用rollup来处理油猴的更少了,当初找半天没找到轮子,没想到哥更新这么快{:4_108:}

笑尘天雨 发表于 2022-10-4 13:48:16

voeoc 发表于 2022-10-4 12:41
老哥可以的,感觉rollup打包油猴应该是趋势,输出的代码比webpack干净多了。但现在rollup用的人少,用rol ...

感觉这种轮子其实没必要,油猴本身就能做到而且还能更好。
比如说像GM_*类的api,既然写了肯定是要用的,只要提前扫一下就行,但是它没有,每次都得自己手动写上,经常忘,挺烦的。不过也不是特别烦,毕竟我也没写几个脚本。
至于说是不是趋势,咱也不懂,能用就行
页: 1 2 [3]
查看完整版本: 搞定rollup插件