我正在苦苦思索如何在我的Svelte项目中从Vite构建一个单独的.js文件,其中包含了我的Svelte项目中构建的所有javascript和CSS。默认情况下,Vite会将应用程序捆绑到一个html文件(这没问题)、两个.js文件(为什么??)和一个.css文件(只是希望将其捆绑到一个js文件中)。
我运行这个非常基本的命令来获得一个入门项目:
npx degit sveltejs/template myproject
我试着添加了几个插件,但是我添加的插件都没有达到我想要的效果。首先,我发现的插件似乎想要创建一个包含所有内容的HTML文件。看起来PostCSS也许能帮上忙,但我不明白我能通过Vite设置什么配置来让它做我想做的事情。
有什么神奇的插件和配置可以输出一个HTML文件和一个js文件,从而将我的Svelte应用程序及其CSS呈现到页面上?
发布于 2021-06-17 13:32:12
我为这个问题创建了一个样板Vite项目:
https://github.com/mvsde/svelte-micro-frontend
也许配置对您的案例有帮助:
import { defineConfig } from 'vite'
import { svelte } from '@sveltejs/vite-plugin-svelte'
export default defineConfig({
plugins: [
svelte({
emitCss: false
})
],
build: {
assetsDir: '',
sourcemap: true,
lib: {
entry: 'src/main.js',
formats: ['iife'],
name: 'SvelteMicroFrontend',
fileName: 'svelte-micro-frontend'
}
}
})发布于 2021-08-27 14:18:19
这对于vite来说不是现成的,但是你可以编写一个快速的插件来实现这一点
const bundle_filename = ''
const css_filename = 'style.css'
defineConfig({
build: {
lib: {
entry: 'src/mycomponent.js',
name: 'mycomponent.js',
fileName: () => 'mycomponent.js',
formats: ['iife'],
},
cssCodeSplit: false,
rollupOptions: {
plugins: [
{
apply: 'build',
enforce: 'post',
name: 'pack-css',
generateBundle(opts, bundle) {
const {
[css_filename]: { source: rawCss },
[bundle_filename]: component,
} = bundle
const IIFEcss = `
(function() {
try {
var elementStyle = document.createElement('style');
elementStyle.innerText = ${JSON.stringify(rawCss)}
document.head.appendChild(elementStyle)
} catch(error) {
console.error(error, 'unable to concat style inside the bundled file')
}
})()`
component.code += IIFEcss
// remove from final bundle
delete bundle[css_filename]
},
},
],
},
},
})发布于 2021-06-22 21:39:25
我也有同样的问题,并能够通过编辑vite.config.ts来修复,如下所示在vite@2.3.8上测试
export default {
build: {
rollupOptions: {
output: {
manualChunks: undefined,
},
},
},
};https://stackoverflow.com/questions/67781170
复制相似问题