美文网首页
npm-only-allow验证(only-allow的最佳替代

npm-only-allow验证(only-allow的最佳替代

作者: 习惯水文的前端苏 | 来源:发表于2023-01-16 16:38 被阅读0次

    \bullet 背景

        基于项目统一管理规范,需要对包管理器进行统一,目前市面上比较流行的是only-allow库,但是经过测试,发现对multirepo的支持度不友好,见下文

    \bullet only-allow的不足

        \alpha 安装缺陷

            \ast 一次性安装

                \vdash 添加preinstall钩子并设置指定的包管理器

                \vdash pnpm i

                    使用pnpm i安装,发现only-allow包能正确给出提示,但是node_modules被正常安装

                \vdash 删除node_modules后,执行cnpm i,表现和pnpm一致

            \ast 单独安装

                执行pnpm|cnpm i lodash ,发现连拦截提示都没有 

        \beta 其他

            在使用了错误的包管理器安装后,当出现错误后,项目会生成npminstall-debug.log文件,当再次切换到“合法的”包管理器安装后,该文件仍然存在

            如果先后使用了pnpm,npm,则生产的lock文件会被保留

    \bullet 结论

        由于以上三个不足,我决定弃用only-allow,通过查找翻阅,发现类似功能的库,但是由于其知名度不如only-allow,因此需要对其进行校验,以确保达到如下要求

        \ast 支持拦截“非法”包管理器,并不安装node_modules

        \ast 当从“非法”转为设置的包管理器后,需要删除无用的文件,比如:上次安装时的错误文件,或遗留的lock文件

    \bullet 使用与验证

        安装npm-only-allow文档添加如下代码

        \vdash 统一安装

            \ast pnpm i

                它可以正确给出提示(而且是中文的,更加友好),且不会生产node_modules

                可以看到,安装错误后生成了.pnpm-debug.log文件,现在使用yarn安装,测试是否能正常安装,以及是否还存在该错误文件,发现符合预期

        \vdash 单个安装

            执行pnpm i lodash,我发现是没有被拦截掉的,翻了下文档后发现,是需要在项目执行时才会针对单独安装进行检测的,则执行npm run start,发现会被正确拦截,并且列出了哪个依赖被错误安装了

            此时,再使用正确的包管理器yarn安装(yarn add lodash)后,再重启测试,发现程序运行正常

    \bullet 结论

        通过在我自己的搭建的简易项目中测试(实际上测试了很多情况),该包基本上能满足预期效果,但是有一点目前尚不支持,那就是,如果我的项目目前已经启动过了,那它就只能等待下一次运行时才能给出检测结果,这一点可能是作者本身没有考虑到吧,不过应该也不难实现,待我去提个issue(2023-4-3更新:issue已解决)

    \bullet npm-only-allow仓库地址

    相关文章

      网友评论

          本文标题:npm-only-allow验证(only-allow的最佳替代

          本文链接:https://www.haomeiwen.com/subject/pdfocdtx.html