在vue中如何引入外部的css文件

vue中引入外部css文件

在項目的src文件下,新建一個style文件夾,存放css文件。

1. 全局引入

將外部的css文件放到style文件下,引入外部文件隻需在main.js文件中

import '@/style/reset.css'

我引入的是清除默認樣式的css文件

2. 局部引入相對路徑

<style scoped>
  @import '../../assets/iconfont/iconfont.css';這個分號一定要寫,要不會報錯
</style>

3. 局部引入絕對路徑

<style scoped>
 @import '@/styles/scroll-bar.scss';這個分號一定要寫,要不會報錯
 
</style>

註意:

使用@import引入樣式文件,就算加scoped,其它沒有引入的模塊還是可以訪問到你的樣式,如果某個組件的類名一致,則就會被污染到。

如果不想被污染,修改引入方式

<style src="@/style/reset.css"  scoped></style>

要是在寫新的樣式,要重新寫一個新的style標簽

<style src="@/style/reset.css"  scoped></style>
<style scoped>
  //新的css樣式
</style>

我引入一個 download.scs 文件:

<style src="./download.scss" scoped>

像上邊引入的時候報:

style-loader: Adds some css to the DOM by adding a \<style> tag

改成下邊這樣就好瞭,也不知道為什麼😄

<style src="./download.scss"  lang="scss" scoped>

css-loader導致vue中樣式失效的坑

問題描述

vue文件中的樣式失效

環境

  • vue-cli 4.4.6
  • css-loader 4.2.1
  • vue-style-loader 4.1.2

原因

vue-cli 4.4.6

  • vue-cli 4.4.6默認對css-loader配置為空

css-loader 4.2.1

  • css-loader4.0後默認對esModule設置的是true

vue-style-loader 4.1.2

  • vue-style-loader 4.1.2默認接收的是commonjs的結果,也就是默認接收的是“css-loader中esModule設置的是false的結果”,所以一個配置的是true,一個接收的是false,最終就不會顯示樣式瞭。

方案

1.在項目的vue.config.js中對css的esModule改成false

module.exports = {
    ...
    css: {
        ...
        esModule: false
    }
    ...
}

2.修改vue-style-loader的源碼

vue-style-loader/index.js:
 var shared = [
    '// style-loader: Adds some css to the DOM by adding a <style> tag',
    '',
    '// load the styles',
    'var content = require(' + request + ').default;', //這裡加一個.default即可
    ...

3.修改css-loader源碼,讓esModule默認為false

css-loader/dist/utils.js

function normalizeOptions(rawOptions, loaderContext) {
  if (rawOptions.icss) {
    loaderContext.emitWarning(new Error('The "icss" option is deprecated, use "modules.compileType: "icss"" instead'));
  }

  const modulesOptions = getModulesOptions(rawOptions, loaderContext);
  return {
    url: typeof rawOptions.url === 'undefined' ? true : rawOptions.url,
    import: typeof rawOptions.import === 'undefined' ? true : rawOptions.import,
    modules: modulesOptions,
    // TODO remove in the next major release
    icss: typeof rawOptions.icss === 'undefined' ? false : rawOptions.icss,
    sourceMap: typeof rawOptions.sourceMap === 'boolean' ? rawOptions.sourceMap : loaderContext.sourceMap,
    importLoaders: rawOptions.importLoaders,
    esModule: typeof rawOptions.esModule === 'undefined' ? false : rawOptions.esModule //默認改成false
  };
}

css-loader開發有點坑啊~ 之前版本都是false,更新後直接改成true,也是牛逼!!! 我TM一個中午的時間不睡覺就為瞭給你提issue瞭😂😂😂😂

以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。

推薦閱讀: