李恒道 发表于 2023-4-3 11:49
执行环境不同
看库有没有提供浏览器运行的
比如svgo属于一个开发系统工具
呃呃,仔细了解一下这个目录 https://cdn.jsdelivr.net/npm/svgo@3.0.2/dist/
就发现 svgo 发布了 esm 格式的包,在浏览器测试运行一下
<script type="module">
import svgo from 'https://cdn.jsdelivr.net/npm/svgo@3.0.2/dist/svgo.browser.js';
const svgString = `<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M17.3154 17.3152C17.6408 16.9897 17.6408 16.4621 17.3154 16.1366L11.1787 9.99997L17.3153 3.86338C17.6407 3.53795 17.6407 3.01031 17.3153 2.68487C16.9898 2.35944 16.4622 2.35944 16.1368 2.68487L10.0002 8.82146L3.86359 2.68486C3.53815 2.35942 3.01051 2.35942 2.68507 2.68486C2.35964 3.0103 2.35964 3.53794 2.68507 3.86337L8.82167 9.99998L2.685 16.1367C2.35956 16.4621 2.35956 16.9897 2.685 17.3152C3.01043 17.6406 3.53807 17.6406 3.86351 17.3152L10.0002 11.1785L16.1369 17.3152C16.4623 17.6406 16.9899 17.6406 17.3154 17.3152Z" fill="#646A73"/>
</svg>
`;
console.log(svgo.optimize(svgString, {
plugins: [`removeXMLNS`]
}).data)
</script>
运行结果如下
可以看到成功使用 插件 removeXMLNS
删除了 xmlns
属性,说明 svgo 可以在浏览器正常使用
但是不能通过油猴的 @require
直接使用,因为它的原理是直接拼接代码,一般情况只适合 iife 格式或者 umd 格式的代码,而 svgo 发布的是 esm ,油猴不支持 esm
解决方法也很简单,用 vite 之类的打包工具重新打包输出为 iife 或者 umd 就行
我重新打包并发布到 npm 上面了,源代码在 https://github.com/lisonge/pkg-cdn.git
iife/umd 的导出名是 Svgo
,使用示例如下
// ==UserScript==
// @name svgo-test
// @namespace Violentmonkey Scripts
// @match https://i.songe.li/
// @grant none
// @version 1.0
// @author -
// @description 2023/4/3 14:03:15
// @require https://cdn.jsdelivr.net/npm/pkg-cdn@latest/dist/svgo/v3.0.2.umd.js
// ==/UserScript==
const svgString = `<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M17.3154 17.3152C17.6408 16.9897 17.6408 16.4621 17.3154 16.1366L11.1787 9.99997L17.3153 3.86338C17.6407 3.53795 17.6407 3.01031 17.3153 2.68487C16.9898 2.35944 16.4622 2.35944 16.1368 2.68487L10.0002 8.82146L3.86359 2.68486C3.53815 2.35942 3.01051 2.35942 2.68507 2.68486C2.35964 3.0103 2.35964 3.53794 2.68507 3.86337L8.82167 9.99998L2.685 16.1367C2.35956 16.4621 2.35956 16.9897 2.685 17.3152C3.01043 17.6406 3.53807 17.6406 3.86351 17.3152L10.0002 11.1785L16.1369 17.3152C16.4623 17.6406 16.9899 17.6406 17.3154 17.3152Z" fill="#646A73"/>
</svg>
`;
console.log(
Svgo.optimize(svgString, {
plugins: [`removeXMLNS`],
}).data,
);