Vue Cli 3 打字稿。无法将 css/sass 导入 <script> 块

Posted

技术标签:

【中文标题】Vue Cli 3 打字稿。无法将 css/sass 导入 <script> 块【英文标题】:Vue Cli 3 Typescript. Cannot import css/sass to the <script> block 【发布时间】:2018-12-23 06:32:41 【问题描述】:

我使用 Vue Cli 3 使用 typescript 构建了新的 vue 应用程序。

当我尝试将 css 或 sass 导入我的打字稿文件时:

从 '@/assets/sass/my.module.scss' 导入 * 作为 sassStyles;

我收到以下错误:

找不到模块

我找到了这篇文章How to use CSS Modules with TypeScript and webpack,但我不知道如何将它与抽象出 webpack 配置的 Vue Cli 3 集成。

知道要在 vue.config.js 中添加什么才能直接导入 css 和 sass 文件来阻止吗?

我需要使用typings-for-css-modules-loader 而不是css-loader

【问题讨论】:

【参考方案1】:

在您的项目中创建一个文件,例如 ambient.d.ts(我的约定,但您可以将其命名为任何名称),内容如下:

declare module "@/assets/sass/*.scss" 
  const styles: any;
  export = styles;


declare module "@/assets/css/*.css" 
  const styles: any;
  export = styles;

调整导出的类型和形式以最符合您的使用情况。

【讨论】:

【参考方案2】:

导入文件本身(即import '@/foo.scss')会自动将样式应用到当前组件,因此您实际上不需要引用导入的样式。那就是:

// import * as sassStyles from '@/assets/sass/my.module.scss'; // DON'T DO THIS
import '@/assets/sass/my.module.scss';

demo

vue-cli 项目中添加对导入 Sass 文件的支持所需的唯一步骤是安装 sasssass-loader(无需额外配置):

npm i -S sass sass-loader

然后,您可以使用以下任一方法导入.scss 文件:

<script>
  import '/path/to/foo.scss';
</script>
<style scoped src="/path/to/foo.scss" lang="scss"></style>

注意可选的scoped 属性使样式仅适用于当前组件(如 CSS 模块)。

【讨论】:

【参考方案3】:

尝试在您的项目根目录中添加一个名为 vue.config.js 的新文件。

在文件中,添加以下内容:

const path = require('path');

module.exports = 
  css: 
    loaderOptions: 
      sass: 
        includePaths: [
          path.resolve(__dirname, 'PATH_TO_WHERE_YOUR_SCSS_FILES_ARE'),
        ],
      ,
    ,
  ,
;

我在尝试从位于node_modules/@material@material 导入scss 文件时遇到了类似的问题,经过两天的挖掘,我找到了这个Github issue 并尝试了一下,并且我将'node_modules' 用作PATH_TO_WHERE_YOUR_SCSS_FILES_ARE,它解决了我的问题。

【讨论】:

以上是关于Vue Cli 3 打字稿。无法将 css/sass 导入 <script> 块的主要内容,如果未能解决你的问题,请参考以下文章

如何将打字稿添加到现有的 vue3 项目?

ESlint 不适用于带有打字稿的 .vue 文件

Swiper - 没有找到依赖打字稿,离子-vue

vue3 vite 别名无法按预期使用打字稿

如何将打字稿添加到 Vue 3 和 Vite 项目

将节点模块导入角度打字稿/角度cli的正确方法是啥