3

我正在尝试使用 snowpack 使用纤细的材质 UI。我已经安装了 Snowpack 和 Snowpacks svelte 模板,如下所示:

npm install --save-dev snowpack@next
npx create-snowpack-app xpapp --template @snowpack/app-template-svelte

这有效,示例苗条页面出现。接下来,我按照 Svelte Material UI 说明“将其捆绑在您自己的代码中”,如此处说明中的“使用”一章所述:https ://github.com/hperrin/svelte-material-ui#usage

所以我安装了 Sass 并在我的snowpack.config.json文件中配置它,如下所示:

{
  "extends": "@snowpack/app-scripts-svelte",
  "scripts": { 
    "build:scss": "sass"
  },
  "devOptions": {},
  "installOptions": {}
}

我在这里遵循了(非常简洁的)说明:https ://www.snowpack.dev/#sass

src/theme/_smui-theme.scss按照说明,我还向源文件添加了一个空文件,并安装了 nessecary @smui 组件。

问题是我目前在启动 snowpack 开发服务器时遇到此错误:

> snowpack dev

Snowpack Dev Server (Beta)
NOTE: Still experimental, default behavior may change.
Starting up...

⠙ snowpack installing... @smui/icon-button, @smui/top-app-bar, svelte/internal
✘ /home/erik/Projects/svelte-xpapp/xpapp/node_modules/@smui/icon-button/_index.scss

Error: Unexpected character '@' (Note that you need plugins to import files that are not JavaScript)
    at error (/home/erik/Projects/svelte-xpapp/xpapp/node_modules/snowpack/node_modules/rollup/dist/shared/rollup.js:161:30)
    at Module.error (/home/erik/Projects/svelte-xpapp/xpapp/node_modules/snowpack/node_modules/rollup/dist/shared/rollup.js:15120:16)
    at tryParse (/home/erik/Projects/svelte-xpapp/xpapp/node_modules/snowpack/node_modules/rollup/dist/shared/rollup.js:15009:23)
    at Module.setSource (/home/erik/Projects/svelte-xpapp/xpapp/node_modules/snowpack/node_modules/rollup/dist/shared/rollup.js:15410:30)
    at ModuleLoader.addModuleSource (/home/erik/Projects/svelte-xpapp/xpapp/node_modules/snowpack/node_modules/rollup/dist/shared/rollup.js:17460:20)
    at async ModuleLoader.fetchModule (/home/erik/Projects/svelte-xpapp/xpapp/node_modules/snowpack/node_modules/rollup/dist/shared/rollup.js:17521:9)
    at async /home/erik/Projects/svelte-xpapp/xpapp/node_modules/snowpack/node_modules/rollup/dist/shared/rollup.js:17491:36
    at async Promise.all (index 0)
    at async ModuleLoader.fetchModule (/home/erik/Projects/svelte-xpapp/xpapp/node_modules/snowpack/node_modules/rollup/dist/shared/rollup.js:17522:9)
    at async Promise.all (index 0)

似乎无法识别@importMaterial UI 中的语句。_index.scss我认为 Snowpack 应该解释/转换 .scss 文件,但它似乎没有这样做。

4

2 回答 2

4

所以我在使用 Svite 和 Snowpack 时遇到了同样的问题。我能够使用裸实现:

// component.svelte <script>
import Button, { Label } from '@smui/button/bare'
import '@smui/button/bare.css'

这就是 Svite 所需的全部内容。

使用 Snowpack,我需要添加rollup-plugin-svelte和更新snowpack.config.js

// snowpack.config.js
module.exports = {
  // ...
  installOptions: {
    rollup: { plugins: [require('rollup-plugin-svelte')()] }
  },
  // ...
}
于 2020-10-02T16:26:33.437 回答
2

我可以使用这些安装选项:

  installOptions: {
    rollup: {
      plugins: [
        require("rollup-plugin-svelte")({
          include: ["./node_modules"],
        }),
        require("rollup-plugin-postcss")({
          use: [
            [
              "sass",
              {
                includePaths: ["./src/theme", "./node_modules"],
              },
            ],
          ],
        }),
      ],
    },
  },

不幸的是,您必须运行npx snowpack dev --reload才能使主题更改生效。这不会将 css 提取到 .css 文件中。在生产构建期间,我还收到了 Dialog 组件的错误消息。

这是一个完整的例子:https ://github.com/LeanderG/svelte-smui

于 2020-12-03T17:48:22.070 回答