这些选择器似乎不是来自 Svelte 组件,因为它们没有作用域(例如.split-button.svelte-a9ylb1
)?还是您:global(.split-button)
在 Svelte 组件中使用?
无论如何...我未能重现您的问题,但我的直觉是您的问题可能来自postcss
插件。它有一个默认启用的inject
选项。这个选项的作用是在你的文档中注入一个<style>
标签;<head>
执行此操作的代码由postcss
插件附加到您的模块的 JS 中。这种行为很可能与正在做什么svelte-preprocess
或rollup-plugin-svelte
正在做什么发生冲突。
尝试在汇总配置中添加inject: false
您正在使用的 3 个位置postcss
,看看这是否有帮助。
另一种可能性可能是服务人员。我认为那里的问题不会产生您得到的结果,但我们永远不知道...您应该尝试“重新加载时更新”和“网络绕过”之类的选项(我不知道在您的浏览器)看看这是否有所作为。
否则,您可能需要显示更多代码。这个精确的 CSS 规则从何而来(例如 Svelte 组件中的样式标签、node_modules 中的 SCSS 文件……)?它是如何导入到您的项目中的(例如import './app.css'
、@import './app.scss'
等),以及在哪里导入?另外,令我惊讶的是,您postcss
仅在服务器中拥有汇总插件(未在其中注册的插件sveltePreprocess
)...您需要这个做什么,而不需要在客户端?
编辑:跟进
等等,什么?您的routes
目录下有一些样式文件?routes/style/global.scss
?
即使这样,我似乎也无法重现您的问题,但值得注意的是,Sapper 会尝试将它遇到的每个文件都包含在此目录下。如果你有一个插件可以让你导入*.scss
文件,那么 Sapper 实际上会看到 a global.scss.js
,所以它会认为它是一个服务器路由。如果没有可以吃 SCSS 的插件,它应该...崩溃。如果有问题的插件postcss
的默认inject
选项仍然是true
,对我来说它看起来像一个明星嫌疑人......
无论如何,一些进一步的澄清点......
svelte-preprocess
仅在文件中启用lang="xxx"
、global
属性在<style global ...>
、中。.svelte
rollup-plugin-postcss
可以另外添加,直接在plugins
数组中(即不作为svelte
插件的选项)。它支持import './foo.scss'
,在.js
文件中,以及在文件的<script>
一部分.svelte
。
(当然,PostCSS 对 SASS 的支持,或 Svelte 预处理对 PostCSS 的支持取决于你提供给它们的配置。)
好的。所以现在有多个地方可以让一些 CSS / SCSS 进入你的构建。我能想到的,有以下几种方式:
<link rel='stylesheet' href='global.css'>
in src/template.html
:这个将按原样复制而不进行处理。
我想你也可以<link>
在文件的标记(~HTML)部分有这样一个“自定义”标签.svelte
,它会按原样包含在生成的 HTML 中(你仍然有责任让参考 CSS 文件可以访问在给定的 URL)。
import 'something.css'
或 'import 'something.scss' in a
.js or JS part of a
.svelte injection file: these will get processed by bundler & plugins, and converted to some JS code, with optionally additional assets that the JS can reference (typically, a proper CSS file is generated, and some JS code dynamically injects a
tag for it at runtime; another approach is to generate some JS that will inject every CSS rule in the doc). PostCSS with
: true` 使用 CSS + 注入标记方法。
<style>
您在文件部分中编写的 CSS / SCSS 样式.svelte
也将由 Svelte 插件以与之前描述的类似方式处理(preprocess
接受原始 CSS 以外的任何内容所需的选项);根据插件配置,它也可能会尝试为您的应用程序编写一个“.css”文件(请参阅文档。使用emitCss
Sapper 显然需要的选项,它应该为每个组件(或可能入口点)输出一个 CSS 文件。
在你的情况下,你说你已经rollup-plugin-postcss
从你的配置中删除了,所以第三点(从 js 导入 css)应该不再可能了。
嗯...我只是希望这可以帮助您进一步调查。
我已经在这个 repo的一个分支上推送了一个 Sapper + PostCSS 示例。据我所知,它没有您在此处描述的问题。所以也许你可以通过与你所拥有的进行比较来找到问题。有关与 vanilla 官方模板的差异,请参阅此提交。
我还尝试添加rollup-plugin-postcss
,就像您最初在配置中所做的那样,以便能够.scss
从 Svelte 组件外部导入。但我没有找到一种不与 Sapper 冲突的方法。
编辑 2
哦,只是为了确定……在进行调查之前,一定要尝试一下rm -r __sapper__ && rm -r src/node_modules/@sapper
(注意:node_modules
在 下src
,而不是在您的项目根目录中的那个)。我敢肯定你已经这样做了,但安全总比抱歉好。陈旧的东西可以住在那里。