@onedarnleyroad/vite-plugin-svg-sprite 2.0.0-beta.0 → 2.0.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +7 -7
- package/package.json +1 -1
- package/src/index.js +7 -5
package/README.md
CHANGED
|
@@ -82,28 +82,28 @@ Each SVG becomes a `<symbol>` with `id="svg-{filename}"`. For example, `arrow.sv
|
|
|
82
82
|
|
|
83
83
|
### With Vite manifest (recommended)
|
|
84
84
|
|
|
85
|
-
With `build.manifest: true` enabled, each sprite is registered in `manifest.json` keyed by its
|
|
85
|
+
With `build.manifest: true` enabled, each sprite is registered in `manifest.json` keyed by its `inputDir`-relative path:
|
|
86
86
|
|
|
87
87
|
```json
|
|
88
88
|
{
|
|
89
|
-
"sprite.svg": { "file": "assets/sprite-DAskUDYW.svg", "src": "sprite.svg", "isEntry": false },
|
|
90
|
-
"sprite-light.svg": { "file": "assets/sprite-light-xV7q1sYy.svg", "src": "sprite-light.svg", "isEntry": false }
|
|
89
|
+
"src/icons/sprite.svg": { "file": "assets/sprite-DAskUDYW.svg", "src": "src/icons/sprite.svg", "isEntry": false },
|
|
90
|
+
"src/icons/sprite-light.svg": { "file": "assets/sprite-light-xV7q1sYy.svg", "src": "src/icons/sprite-light.svg", "isEntry": false }
|
|
91
91
|
}
|
|
92
92
|
```
|
|
93
93
|
|
|
94
|
-
With Craft CMS + [nystudio107/craft-vite](https://nystudio107.com/docs/vite/):
|
|
94
|
+
With Craft CMS + [nystudio107/craft-vite](https://nystudio107.com/docs/vite/), use `craft.vite.asset()` — **not `entry()`**. The `asset()` helper is dev-server-aware; `entry()` always reads the manifest, so in dev it would serve stale built files:
|
|
95
95
|
|
|
96
96
|
```twig
|
|
97
97
|
<svg aria-hidden="true">
|
|
98
|
-
<use href="{{ craft.vite.
|
|
98
|
+
<use href="{{ craft.vite.asset('src/icons/sprite.svg') }}#svg-arrow"></use>
|
|
99
99
|
</svg>
|
|
100
100
|
|
|
101
101
|
<svg aria-hidden="true">
|
|
102
|
-
<use href="{{ craft.vite.
|
|
102
|
+
<use href="{{ craft.vite.asset('src/icons/sprite-light.svg') }}#svg-sun"></use>
|
|
103
103
|
</svg>
|
|
104
104
|
```
|
|
105
105
|
|
|
106
|
-
In dev
|
|
106
|
+
In dev, `asset()` returns the Vite dev-server URL (e.g. `https://…:3000/src/icons/sprite.svg`), which the plugin's in-memory middleware serves. In production it returns the hashed URL from the manifest.
|
|
107
107
|
|
|
108
108
|
### Without manifest
|
|
109
109
|
|
package/package.json
CHANGED
package/src/index.js
CHANGED
|
@@ -98,8 +98,9 @@ export default function svgSpritePlugin(options = {}) {
|
|
|
98
98
|
const source = buildSpriteSvg(group.dir, group.files)
|
|
99
99
|
const base = group.logicalName.replace(/\.svg$/, '')
|
|
100
100
|
const hashedFileName = join(outputDir, `${base}-${hashContent(source)}.svg`)
|
|
101
|
+
const key = join(inputDir, group.logicalName)
|
|
101
102
|
this.emitFile({ type: 'asset', fileName: hashedFileName, source })
|
|
102
|
-
emitted.push({
|
|
103
|
+
emitted.push({ key, fileName: hashedFileName })
|
|
103
104
|
}
|
|
104
105
|
},
|
|
105
106
|
|
|
@@ -114,10 +115,10 @@ export default function svgSpritePlugin(options = {}) {
|
|
|
114
115
|
|
|
115
116
|
const manifest = JSON.parse(readFileSync(manifestPath, 'utf-8'))
|
|
116
117
|
|
|
117
|
-
for (const {
|
|
118
|
-
manifest[
|
|
118
|
+
for (const { key, fileName } of emitted) {
|
|
119
|
+
manifest[key] = {
|
|
119
120
|
file: fileName,
|
|
120
|
-
src:
|
|
121
|
+
src: key,
|
|
121
122
|
isEntry: false,
|
|
122
123
|
}
|
|
123
124
|
}
|
|
@@ -131,7 +132,8 @@ export default function svgSpritePlugin(options = {}) {
|
|
|
131
132
|
const rebuild = () => {
|
|
132
133
|
sprites.clear()
|
|
133
134
|
for (const group of collectSpriteGroups(inputDir, prefix)) {
|
|
134
|
-
|
|
135
|
+
const key = join(inputDir, group.logicalName)
|
|
136
|
+
sprites.set(key, buildSpriteSvg(group.dir, group.files))
|
|
135
137
|
}
|
|
136
138
|
}
|
|
137
139
|
rebuild()
|