假设我们从以下启动包开始: https ://github.com/angularclass/angular2-webpack-starter
在 npm install
和 npm run start
之后一切正常。
我想添加一个外部 css 模块,例如 bootstrap 4 的 css(并且只有 css)。 (我知道 bootstrap 有一个 bootstrap-loader,但现在我要的是通用解决方案,所以请在这里考虑 bootstrap 4,因为它可能是通过 npm 可用的任何其他 css 模块)。
我通过 npm 安装引导程序: npm install bootstrap@4.0.0-alpha.4 --save
首先我认为在 vendor.browser.ts 文件中添加 import 'bootstrap/dist/css/bootstrap.css';
就足够了。
但事实并非如此。
我应该怎么做才能有适当的解决方案?
我不要求的解决方案:
- “将外部 css 模块复制到资产文件夹,并从那里使用它”
- 我正在寻找与 npm 包一起使用的解决方案。
- “为 webpack 使用 bootstrap-loader”
- 如上所述,我正在寻找一个通用的解决方案,bootstrap 在这里只是一个示例。
- “使用另一个堆栈”
- 我正在寻找我上面提到的确切入门包中的解决方案。
原文由 Burnee 发布,翻译遵循 CC BY-SA 4.0 许可协议
如果不进行一些更改,您将无法使用该堆栈将任何 CSS 导入您的 供应商 文件。
为什么?好吧,因为这一行:
它只是将您的 css 作为字符串导入,而实际上您想要的是样式标签中的供应商 css。如果你检查
config/webpack.commons.js
你会发现这个规则:此规则允许您的组件导入 css 文件,基本上是这样的:
在 AppComponent 中没有封装,因为这一行
encapsulation: ViewEncapsulation.None,
这意味着任何 CSS 规则都将全局应用于您的应用程序。所以你可以在你的应用组件中导入引导样式:但是如果你坚持导入到你的
vendor.ts
那么你需要安装一个新的加载器,npm i style-loader --save-dev
这将允许 webpack 将 css 注入你的页面。然后,您需要在 webpack.common.js 上创建一个特定规则并更改现有规则:第一条规则仅在您尝试从
node_modules
中的任何包导入 css 时应用,第二条规则将适用于您从node_modules
之外导入的任何 css