我有一个配置了Tailwindcss和Postcss的Svelte应用程序。
在开发模式下,一切都运行良好,每种样式(全局样式和组件样式)均已使用并正常工作。
当我进行新的生产构建时,未使用组件样式,似乎在生产构建期间被忽略了。
我在组件中添加了一些样式,例如Svelte文档展示,并且在开发人员本地环境中运行良好。
<style>
div {
height: 37px;
}
div:hover {
height: 72px;
border-radius: 1rem;
}
</style>
即使当我使用专用样式文件时,css束也完全失败,并且某些其他css属性(来自tailwindcss)也不起作用...
我在汇总/ Postcss配置中没有发现什么地方出了错。
这是我的rollup.config.js
import svelte from 'rollup-plugin-svelte';
import resolve from '@rollup/plugin-node-resolve';
import commonjs from '@rollup/plugin-commonjs';
import json from '@rollup/plugin-json';
import livereload from 'rollup-plugin-livereload';
import postcss from 'rollup-plugin-postcss';
import { terser } from 'rollup-plugin-terser';
import sveltePreprocess from 'svelte-preprocess';
import svelteSVG from 'rollup-plugin-svelte-svg';
const production = !process.env.ROLLUP_WATCH;
function serve() {
let started = false;
return {
writeBundle() {
if (!started) {
started = true;
// eslint-disable-next-line global-require
require('child_process').spawn('npm', ['run', 'start', '--', '--dev'], {
stdio: ['ignore', 'inherit', 'inherit'],
shell: true,
});
}
},
};
}
export default {
input: 'src/main.js',
context: 'window',
output: {
sourcemap: true,
format: 'iife',
name: 'app',
file: 'public/build/bundle.js',
},
plugins: [
postcss({
extract: true,
}),
json(),
svelteSVG(),
svelte({
preprocess: sveltePreprocess({ postcss: true }),
dev: !production,
emitCss: true,
css: (css) => {
css.write('public/build/bundle.css');
},
}),
resolve({
browser: true,
dedupe: ['svelte'],
}),
commonjs(),
!production && serve(),
!production && livereload('public'),
production && terser(),
],
watch: {
clearScreen: false,
},
};
这是我的postcss.config.js
const cssnano = require('cssnano');
const postcssColorMod = require('postcss-color-mod-function');
const postcssPresetEnv = require('postcss-preset-env');
const postcssImport = require('postcss-import');
const postcssUrl = require('postcss-url');
const purgecss = require('@fullhuman/postcss-purgecss');
const tailwindcss = require('tailwindcss');
const postcssFontMagician = require('postcss-font-magician');
const production = !process.env.ROLLUP_WATCH;
module.exports = {
plugins: [
postcssFontMagician({
variants: {
'Roboto Mono': {
300: [],
400: [],
700: [],
},
},
foundries: 'google',
protocol: 'https:',
}),
postcssImport(),
postcssUrl(),
tailwindcss(),
postcssPresetEnv({
stage: 0,
autoprefixer: {
grid: false,
},
}),
postcssColorMod(),
cssnano({
autoprefixer: false,
preset: ['default'],
}),
production &&
purgecss({
content: ['./**/*.svelte'],
defaultExtractor: (content) => content.match(/[A-Za-z0-9-_:/]+/g) || [],
}),
],
};
在寻找解决方案并修改配置几个小时后,我无法使它起作用。 我认为purgecss函数正在删除我组件的样式,而无需深信。
一切似乎都还可以,我想念什么吗?
编辑
最终的捆绑包中甚至没有包含一些JavaScript。很奇怪
答案 0 :(得分:0)
您可以检查几件事:
缓存被清除了吗?
public/global.css
是否包含您的样式(还是/public/build/bundle.css
)?
您可以通过更改index.html
中的“版本”来确保您的浏览器不使用缓存的文件:
<link rel="stylesheet" href="/global.css?v=2.4" />
<link rel="stylesheet" href="/build/bundle.css?v=2.4" />
<script defer src="/build/bundle.js?v=2.4"></script>
v=2.4
毫无意义,您只需在每次构建/部署后更改/增加编号,这将迫使浏览器重新加载每个文件。
打开global.css
并搜索样式标签,是否找到它们。如果是,则将它们包括在内,这是缓存问题。如果不是这样,那就是摇树的问题。