对于全局样式,我已经回答了这个问题 https://stackoverflow.com/a/55376370/1393400.
Update
For ng-packgr
版本 9.x 及以上
不直接支持将资源复制到输出文件夹,如中所述这一页 https://github.com/ng-packagr/ng-packagr/blob/master/docs/copy-assets.md
{
"$schema": "./node_modules/ng-packagr/package.schema.json",
"name": "@my/library",
"version": "1.0.0",
"ngPackage": {
"assets": [
"CHANGELOG.md",
"./styles/**/*.theme.scss"
],
"lib": {
...
}
}
}
因此,在您的项目中,您可以通过以下方式从库导入文件来使用样式:
@import '@my/library/path-to-file/file-name.scss'
或使用显式相对路径(确保使用尽可能../
按要求)
@import '../node_modules/@my/library/path-to-file/file-name.scss'
旧答案
**For other versions**
- 创建一个
index.scss
文件位于库的根文件夹中。如果你关注本指南来自 Angular https://angular.io/guide/creating-libraries,那么你的路径将是my-project/projects/my-library/index.scss
。这也是您的文件夹所在的文件夹package.json
is.
So, index.scss
将是包含变量和 mixin 的文件
$grey: #222;
@mixin mymixin {
background: #222;
}
- 使用以下命令将其包含在您的库 scss 文件中
import
@import '../../index.scss';
或者您的组件 scss 文件所在的任何相对路径。
- 现在,为了在您的应用程序项目中包含此文件,请在构建后将其复制到 dist 目录。为此,请编辑 Angular 库的项目
package.json
文件(不是图书馆的)。
{
"name": "my-project",
"version": "1.0.0",
"scripts": {
"ng": "ng",
"start": "ng serve",
"build": "ng build && npm run copyScss",
"test": "ng test",
"lint": "ng lint",
"e2e": "ng e2e",
"copyScss": "xcopy \"projects\my-library\index.scss\" \"dist\\my-library\\\""
},
...
}
-
现在,非常重要,不要使用ng build
要构建您的库,请使用npm run build
。这将自动执行复制命令。现在index.scss
文件与您的库一起导出my-project/dist
folder.
-
包括index.scss
在您的应用程序项目的 scss 文件中
// ~ stands for the node_modules folder
@import '~my-library/index.scss';
现在,您在安装库的所有项目中都拥有了所有库 mixin。
Cheers!
PS变通办法并不是最优雅的解决方案,但当其他方法都不起作用时,它们就会变通!