Comments (4)
This is something I could add to the documentation. I'm happy you could fix the problem in the end and that it made sense. I'll close the issue and add this to my todos :)
from external-svg-sprite-loader.
@mnpenner interpolateName
is already being used. You should be able to specify a name / path with a hash. If that's not working could you please show me what's the path you are using?
from external-svg-sprite-loader.
Thanks for responding.
Here's how I configured the loader:
{
loader: 'external-svg-sprite?name=[name]-[sha1:hash:hex:10].[ext]',
test: /\.svg$/,
include: path.resolve(assetsDir, 'icons'),
},
Which is exactly the same way I configured my url-loader
. However, I get this error when I try to set the name
option that way:
Error: Module build failed: TypeError: Cannot read property '0' of null
at new SvgSprite (C:\Users\Mark\PhpstormProjects\project\node_modules\external-svg-sprite-loader\lib\SvgSprite.js:41:87)
at Function.getSprite (C:\Users\Mark\PhpstormProjects\project\node_modules\external-svg-sprite-loader\lib\SvgStorePlugin.js:53:35)
at imagemin.buffer.then (C:\Users\Mark\PhpstormProjects\project\node_modules\external-svg-sprite-loader\index.js:70:41)
at DependenciesBlock.onModuleBuildFailed (C:\Users\Mark\PhpstormProjects\project\node_modules\webpack-core\lib\NormalModuleMixin.js:315:19)
at nextLoader (C:\Users\Mark\PhpstormProjects\project\node_modules\webpack-core\lib\NormalModuleMixin.js:270:31)
at C:\Users\Mark\PhpstormProjects\project\node_modules\webpack-core\lib\NormalModuleMixin.js:292:15
at context.callback (C:\Users\Mark\PhpstormProjects\project\node_modules\webpack-core\lib\NormalModuleMixin.js:148:14)
at imagemin.buffer.then.catch (C:\Users\Mark\PhpstormProjects\project\node_modules\external-svg-sprite-loader\index.js:86:13)
Works fine when I use a static name like "spritemap.svg".
I will try to dig a bit deeper to see where it's breaking.
It's breaking in SvgSprite.js:
class SvgSprite {
/**
* Initializes all sprite properties.
* @param {string} resourcePath - the relative path for the sprite based on the output folder.
*/
constructor(resourcePath) {
const name = path.basename(resourcePath).match(/(?!\[[^[\]]*)\w+(?![^[\]]*])/)[0]; // <-- crashes here
resourcePath
is [name]-[sha1:hash:hex:10].[ext]
and the .match
is returning null
.
from external-svg-sprite-loader.
OK, I just realized I shouldn't have used [name]
and [ext]
in my name. It makes sense for url/file-loader because we have an input file to which those things refer, but external-svg-sprite-loader is creating a brand new image so those values aren't set.
It works fine with sprite-[sha1:hash:hex:10].svg
, which is all I wanted. Sorry for wasting your time :-)
You can close this ticket unless you want to put in better error-handling for dummies like me.
from external-svg-sprite-loader.
Related Issues (20)
- Clearer errors when trying to use the latest version with Webpack 4
- Duplicated IDs in icon sprite
- angular13 not generate sprite file
- It doesn't work with webpack 5 cache=filesystem
- SVGO Options HOT 4
- "TypeError: loaders is not iterable" after upgrade to v4 HOT 8
- Odd behavior when generating a manifest file HOT 8
- consistency with others loaders in manifest.json HOT 4
- Error when defining Rule.use as a function HOT 2
- Using `webpack-chain` breaks default options HOT 1
- It doesn't generate svg sprite HOT 17
- The module removes "fill" attribute when converting to symbol HOT 2
- Alternative (simpler) way to address the images inside the sprite (no math) HOT 1
- deprecation warning for chunk.files in webpack 5 HOT 1
- The sprite status is blocked: origin (webpack --mode production) HOT 23
- Can't run in storybook
- Deprecation warning for Chunk.modulesIterable
- Breaks with [email protected] HOT 3
- SvgStorePlugin fails if there are any other unrelated errors in the build HOT 1
- Support and compatibility with Webpack 4 regarding mini-css-extract-plugin HOT 6
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from external-svg-sprite-loader.