the CSS modules will be generated as Blobs, so relative paths don't work (they would be relative to > chrome:blob or chrome:devtools). In order for assets to maintain correct paths setting output.publicPath > property of webpack configuration must be set, so that absolute paths are generated.
style-loder 无法自己设置publicpath, 所以只能在ExtractTextPlugin后的css目录路径 和 webpack.base.conf做文章的,
解決的办法有两个,
assetsSubDirectory: 'AbsolutePath/projectPath/static',
assetsPublicPath: '/',
// 不需要提到static/css 中
//new ExtractTextPlugin(utils.assetsPath('css/[name].[contenthash].css')),
new ExtractTextPlugin('[name].[contenthash].css'),
config/index.js
assetsSubDirectory: 'static',
assetsPublicPath: './',
在知道项目的绝对路径可以用一方法,
不知道项目的绝对路径可以用二方法,(只是css文件裸在youproject中)^-^
issue,没想到--自问自答
我正在用VueCli开发一个Electron应用,遇到了同样的问题,蛋疼至极
css文件里面通过src引入的字体文件,在编译后指向了static/icons/xxx.woff2,而正确的引用方式应该是'../icons/xxx/woff2',因为css/和icons/是staitc/下面的同级目录,只能用你提供的第二种方式来解决,找了半天没有其他的解决方案。。。。
@margox 那你就点个赞吧
已点赞,不过我还在继续找解决方案
问题暂时可以解决,不过还是不够优雅....
@jrt324 我后面写了个webpack的loader进行的硬替换。。。
@margox 可以把代码贴出来看看吗?
@jrt324
在build目录下新建一个cssPathResolver.js,内容如下:
module.exports = function (source) {
if (process.env.NODE_ENV === 'production') {
return source.replace('__webpack_public_path__ + "static', '"..')
} else {
return source
}
}
具体要替换的内容你可能得自己调整下,这个loader要用在被css引入的资源上,而不是css,在webpack.base.conf.js里面修改下就行了,例如在我的项目里是为了解决iconfont路径不对的问题,我是这样用的:
{
test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/,
loaders: [
{
loader: path.resolve(__dirname, 'cssPathResolver')
},
{
loader: 'url-loader',
query: {
limit: 10000,
name: utils.assetsPath('icons/[name].[hash:7].[ext]'),
}
}
]
}
@margox 此方案会造成在页面中img的路径一并被修改。
我用这个方法可以
1、不要在vue文件
Most helpful comment
@jrt324
在build目录下新建一个cssPathResolver.js,内容如下:
具体要替换的内容你可能得自己调整下,这个loader要用在被css引入的资源上,而不是css,在webpack.base.conf.js里面修改下就行了,例如在我的项目里是为了解决iconfont路径不对的问题,我是这样用的: