html图片别名,webpack配置alias别名以及css-loader的alias别名

webpack中alias的配置

先看一段完整的vue开发中webpack的配置module.exports = {

context: path.resolve(__dirname, '../'),

entry: {

app:['babel-polyfill','./src/main.js'] ,

timeLookScreen:'./src/timeLookScreen.js',

},

output: {

path: config.build.assetsRoot,

filename: '[name].js',

publicPath: process.env.NODE_ENV === 'production'

? config.build.assetsPublicPath

: config.dev.assetsPublicPath

},

resolve: {

extensions: ['.js', '.vue', '.json'],

alias: {

'vue$': 'vue/dist/vue.esm.js',

'@': resolve('src'),

'&': resolve('src/assets')

}

},

module: {

rules: [

{

test: /\.vue$/,

loader: 'vue-loader',

options: vueLoaderConfig

},

{

test: /\.js$/,

loader: 'babel-loader',

include: [resolve('src'), resolve('test'), resolve('node_modules/webpack-dev-server/client')]

},

{

test: /\.(png|jpe?g|gif|svg)(\?.*)?$/,

loader: 'url-loader',

options: {

limit: 10000,

name: utils.assetsPath('img/[name].[hash:7].[ext]')

}

},

{

test: /\.(mp4|webm|ogg|mp3|wav|flac|aac)(\?.*)?$/,

loader: 'url-loader',

options: {

limit: 10000,

name: utils.assetsPath('media/[name].[hash:7].[ext]')

}

},

{

test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/,

loader: 'url-loader',

options: {

limit: 10000,

name: utils.assetsPath('fonts/[name].[hash:7].[ext]')

}

}

]

},

plugins:[

new HtmlWebpackPlugin({

filename: 'rtmpLive.html',

template: 'rtmpLive.html',

inject: false

}),

new HtmlWebpackPlugin({

filename:'vivo.html',

template:'vivo.html',

inject:false

}),

new HtmlWebpackPlugin({

filename: 'timeLookScreen.html',

template: 'timeLookScreen.html',

inject: 'body',

chunks:['manifest','vendor','timeLookScreen'],

}),

],

node: {

// prevent webpack from injecting useless setImmediate polyfill because Vue

// source contains it (although only uses it if it's native).

setImmediate: false,

// prevent webpack from injecting mocks to Node native modules

// that does not make sense for the client

dgram: 'empty',

fs: 'empty',

net: 'empty',

tls: 'empty',

child_process: 'empty'

}

}

这其中有一段关于alias的配置resolve: {

extensions: ['.js', '.vue', '.json'],

alias: {

'vue$': 'vue/dist/vue.esm.js',

'@': resolve('src'),

'&': resolve('src/assets')

}

},

这段配置中的alias用来配置别名,其中带$符号结尾,表示具体的文件,其他的表示目录。function resolve (dir) {

return path.join(__dirname, '..', dir)

}

resolve方法如上,其中的__dirname表示当前目录,path.join是node里面的一个方法,用来连接字符串组成目录。

上面的配置可以使我们在vue单页面组件中方便的引用src下的组件和assets下面的资源。import screen from '@/components/timelook/screen' //引入组件

//引入音频文件

import wav2 from '&/voice/2.wav'

import wav3 from '&/voice/3.wav'

这样我们路径上书写就会方便很多,然而对于图片等资源的引用多在css中使用较多,这时候你应该希望能在css中也使用这样简洁的路径写法:.info-list .left .img-bg{

width: 102px;

height: 126px;

display: inline-block;

background: url(&/102x126.jpg);

-webkit-background-size: cover;

background-size: cover;

background-position: 50% 45%;

overflow: hidden;

}

这个时候你这样写,webpack编译是会报错显示找不到对应的资源。这是因为在webpack配置项里面的alias只能在js中使用。

如果你想要在css中这样使用,那么需要在css-loader里面进行alias别名的配置const cssLoader = {

loader: 'css-loader',

options: {

sourceMap: options.sourceMap,

alias:{

'&':path.join(__dirname,'..','src/assets')

}

}

}

上面是摘自vue-cli生成的css-loader配置文件的部分,我们需要在这里添加上alias别名的配置后,才可以在css样式中使用简洁的路径书写方式。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值