上一主题 下一主题
ScriptCat,新一代的脚本管理器脚本站,与全世界分享你的用户脚本油猴脚本开发指南教程目录
123
返回列表 发新帖
楼主: 笑尘天雨 - 

搞定rollup插件

[复制链接]
  • TA的每日心情
    无聊
    2022-8-21 01:21
  • 签到天数: 1 天

    [LV.1]初来乍到

    7

    主题

    58

    回帖

    63

    积分

    初级工程师

    积分
    63
    发表于 2022-9-26 23:33:12 | 显示全部楼层
    voeoc 发表于 2022-9-13 23:34
    尝试用了下,感觉非常好用,只是希望加一些强迫症选项

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

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

    使用道具 举报

  • TA的每日心情
    开心
    2022-11-13 00:00
  • 签到天数: 33 天

    [LV.5]常住居民I

    0

    主题

    19

    回帖

    44

    积分

    初级工程师

    积分
    44
    发表于 2022-9-27 13:48:07 | 显示全部楼层
    笑尘天雨 发表于 2022-9-26 23:12
    rollup内置的acron不支持解析ts,难道要再使用个别的ast解析?脑壳疼

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

    8.     return gulp.src(commonConf.input)
    9.         .on("data", function (file) {
    10.             // 提取入口文件的header
    11.             userHeader = file.contents.toString().match(REGEXP_USER_HEADER)?.at(0) || "";
    12.             return file.contents;
    13.         })
    14.         .pipe(gulpStreamRollup(commonConf))
    15.         .on("data", function (file) {
    16.             // 还原header
    17.             const finalOutput = userHeader + "\n" + file.contents.toString();
    18.             return file.contents = Buffer.from(finalOutput);
    19.         })
    20.         .pipe(rename(fileInfo.outputFullName))
    21.         .pipe(gulp.dest(fileInfo.buildDir));
    22. });
    复制代码

    我的需求比较简单,就是打包完我的header不变就行。如果是类似这种需要自动生成所有header的,其实感觉要不要做gulp插件更好,因为考虑的东西可以更少,rollup就单纯作为一个打包。
    回复

    使用道具 举报

  • TA的每日心情
    无聊
    2022-8-21 01:21
  • 签到天数: 1 天

    [LV.1]初来乍到

    7

    主题

    58

    回帖

    63

    积分

    初级工程师

    积分
    63
    发表于 2022-9-27 14:34:37 | 显示全部楼层
    voeoc 发表于 2022-9-27 13:48
    我后面还是用回正则了,集成gulp+rollup,在gulp流提取入口文件header,然后直接附加到打包完毕的文件就 ...

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

    使用道具 举报

  • TA的每日心情
    无聊
    2022-8-21 01:21
  • 签到天数: 1 天

    [LV.1]初来乍到

    7

    主题

    58

    回帖

    63

    积分

    初级工程师

    积分
    63
    发表于 2022-10-3 22:27:42 | 显示全部楼层
    voeoc 发表于 2022-9-27 13:48
    我后面还是用回正则了,集成gulp+rollup,在gulp流提取入口文件header,然后直接附加到打包完毕的文件就 ...

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

    使用道具 举报

  • TA的每日心情
    开心
    2022-11-13 00:00
  • 签到天数: 33 天

    [LV.5]常住居民I

    0

    主题

    19

    回帖

    44

    积分

    初级工程师

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

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

    使用道具 举报

  • TA的每日心情
    无聊
    2022-8-21 01:21
  • 签到天数: 1 天

    [LV.1]初来乍到

    7

    主题

    58

    回帖

    63

    积分

    初级工程师

    积分
    63
    发表于 2022-10-4 13:48:16 | 显示全部楼层
    voeoc 发表于 2022-10-4 12:41
    老哥可以的,感觉rollup打包油猴应该是趋势,输出的代码比webpack干净多了。但现在rollup用的人少,用rol ...

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

    使用道具 举报

    123
    返回列表 发新帖

    发表回复

    本版积分规则

    快速回复 返回顶部 返回列表