You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
I think this problem is specifically related to vue3, typescript, vite. The TLDR is that the index.js exports for this library don't have a .vue extension.
this issue occurs because the node_modules/@iconscout/vue-unicons/index.js file looks like:
export { default as Uil0Plus } from './icons/uil-0-plus'
...
when typescript/vite default config expects a .vue extension:
export { default as Uil0Plus } from './icons/uil-0-plus.vue'
During vite build this will trigger:
Could not resolve "./icons/uil-files-landscapes" from "node_modules/@iconscout/vue-unicons/index.js"
The solution I came up with is a extremly janky, but it works! 😉 .. here is a custom plugin, put it in the vite.config.ts that appends the .vue .. also, there is an odd behavior in the relative path lookup and I'm not sure why/how that happens (but using __dirname fixes that!) .. hope this helps.
// ...
import path from 'path';
import { Plugin } from 'vite';
function customIconPathPlugin(): Plugin {
/*
this will fix the issue with vite rollup not finding the iconscout icons
*/
return {
name: 'custom-icon-path-plugin',
resolveId(source) {
if (source.startsWith('./icons/')) {
const filePath = path.resolve(__dirname, 'node_modules/@iconscout/vue-unicons', source)+".vue";
return filePath;
}
},
};
}
// https://vitejs.dev/config/
export default defineConfig({
// THEN ADD customIconPathPlugin()
plugins: [vue(), customIconPathPlugin()],
resolve: {
alias: {
'@': path.resolve(__dirname, 'src')
},
}
})
Note: also need to declare types
declare module '@iconscout/vue-unicons' {
import { DefineComponent } from 'vue';
// Declare each icon you use as a Vue component
export const UilVuejs: DefineComponent<{}, {}, any>;
}
I'm sure there are better solutions, so I'll follow cunninghams law and post this working version and hopefully somebody who is better at vite/typescript/et al. .. or perhaps the maintains of iconscout will create a typescript friendly version and close this issue.
The text was updated successfully, but these errors were encountered:
I think this problem is specifically related to vue3, typescript, vite. The TLDR is that the index.js exports for this library don't have a
.vue
extension.this issue occurs because the node_modules/@iconscout/vue-unicons/index.js file looks like:
when typescript/vite default config expects a .vue extension:
During
vite build
this will trigger:The solution I came up with is a extremly janky, but it works! 😉 .. here is a custom plugin, put it in the
vite.config.ts
that appends the .vue .. also, there is an odd behavior in the relative path lookup and I'm not sure why/how that happens (but using __dirname fixes that!) .. hope this helps.Note: also need to declare types
I'm sure there are better solutions, so I'll follow cunninghams law and post this working version and hopefully somebody who is better at vite/typescript/et al. .. or perhaps the maintains of iconscout will create a typescript friendly version and close this issue.
The text was updated successfully, but these errors were encountered: