在 angular-cli 库项目中使用别名设置 scss 路径

Posted

技术标签:

【中文标题】在 angular-cli 库项目中使用别名设置 scss 路径【英文标题】:Set scss path using alias in angular-cli library project 【发布时间】:2019-03-03 00:07:21 【问题描述】:

我正在使用 angular-cli 创建一个库项目。按照angular docs 的说明,我最终拥有一个./root/src/app 文件夹,我可以在其中放置一个测试应用程序来展示我的库的功能,以及一个包含我的库功能的./root/projects/library-name 文件夹。

现在,如果我在我的 ./root/src/app 中想要导入模块/组件/类等,angular-cli 已经为我设置了我的 tsconfig.json,并带有键/值路径配置。


  "compilerOptions": 
    "paths": 
      "my-library/*": [
        "dist/my-library/*"
      ]
    
  

这将用于我们./root/src/app 的所有目的,模仿我们作为 node_module 安装的库。

因此,即使库是针对 ./root/dist/library-name 构建的,以下内容在我的测试应用中也很有效:

import  MyLibraryModule  from 'library-name';

问题

SCSS 不符合 tsconfig.json 中描述的相同规则。 如果我的库包含一些我希望为我的库的消费者提供的 scss,我可以这样做。每个安装我的库的人都可以通过

访问我的 scss
@import '~library-name/scss';

但我的测试应用不能。

问题

如何在 angular.json 中配置我的 scss 预处理器配置,使其模仿 angular-cli 对我的 tsconfig.json 所做的操作,但对于 scss?换一种说法;如何配置 angular-cli 为我的库构建输出设置目录别名?

编辑 澄清一下,一旦库发布,我的 scss 就可以访问。当它被其他应用程序使用时没有问题。我的问题是在我的 ./root/src/app 测试应用程序中到达已发布的 scss。

【问题讨论】:

【参考方案1】:

我自己的项目也有同样的问题。我想在我的库旁边导出一些 scss 文件,比如 angular material 的主题文件夹。我发现使用 scss-bundle 库是一个很好的解决方案,因为显然没有办法使用 angular cli。

使用scss-bundle 非常简单。您需要一个配置文件,例如:


    "entry": "src/lib/themes/_core.scss",
    "dest": "dist/themes/_theme.scss"

并在每次构建库时运行此命令:scss-bundle -c ./scss-bundle.config.json

这里是github repo,以防您有不同的需求

更新:更改 sass 加载器配置,以便您可以更轻松地在应用程序项目中导入 scss 文件

如果你想像从 node_modules 一样导入 scss 部分,你需要更改 webpack 和 sass-loader 配置。 WEBpack 配置默认隐藏在 Angular cli 中,具体取决于您的 cli 版本,您必须更改它。

1.x 您需要使用ng eject 来“弹出”webpack 配置文件。 Official docs 为此

6.x 在 cli v6 中 ng eject 暂时被禁用,但仍有办法解决此问题,您可以找到编写良好的指南 here

在所有这些之后,您需要配置 sass-loader 以将您的 lib 项目视为根路径,您可以找到 here 的答案

【讨论】:

问题不在于从./library/projects/my-library 提供scss。问题是@import '~my-library/scss' 来自我在./library/src/app/ 中的代码(我的测试应用程序) 但是很高兴知道我是否想捆绑我的 scss,而不是将其作为单个文件提供。谢谢你。 @ØysteinAmundsen 哦,我明白了,抱歉误会,现在有点难。我将更新我在互联网上所知道和发现的内容,希望对您有所帮助 哇!您在更新中提出的解决方案似乎相当复杂。没有更简单的方法吗? 在现代,您不必为了自定义 Angular 构建过程和 Webpack 配置而弹出。例如,您可以使用它来添加额外的 webpack 配置:npmjs.com/package/@angular-builders/custom-webpack

以上是关于在 angular-cli 库项目中使用别名设置 scss 路径的主要内容,如果未能解决你的问题,请参考以下文章

如何在 angular-cli 中为长路径制作“别名”?

您必须在 angular-cli 项目中才能在重新安装 angular-cli 后使用 build 命令

如何使用 angular-cli 只执行一个测试规范

在 Nativescript 代码共享项目中使用 Angular 库

带有快速项目的 angular-cli

缺少 .angular-cli.json 文件:Angular