[英]Why webpack alias doesn't work?
我在我的项目中使用 webpack 和 postcss-import 。 我编写组件,并且某些组件可以嵌套到另一个组件,因此为它们编写路径很复杂,例如import '../../../component-a';
等等。 我想创建别名来解决这个问题。 所以在我的 webpack.config.js 中我写道:
resolve: {
alias: {
'@blocks': path.resolve(__dirname, './source/blocks'),
'@styles': path.resolve(__dirname, './source/styles')
我的 webpack 配置位于根目录中。 所以,问题是当我在 css 中写类似@import '@styles/vars.css';
– 它不起作用。 我收到错误“未定义的变量 bla bla bla ...”。 但是当我在 js 文件中导入块并import Logo from '@blocks/logo';
- 它工作得很好。 我还想注意@import '@styles/vars.css';
– 使用触控笔。 所以也许我错过了一些关于 postcss-import 插件的东西。 如何使它起作用?
UPD postcss 配置部分:
```
var webpack = require("webpack");
function postcssModules () {
return [
require('postcss-nested')(),
require('postcss-import')({
addDependencyTo: webpack
}),
require('postcss-simple-vars'),
require('postcss-cssnext')({
warnForDuplicates: false
}),
require('lost')
]
};
module.exports = postcssModules;
```
可能这可以帮助(我在那里回答):
https://github.com/postcss/postcss-import/issues/190#issuecomment-298078092 https://github.com/postcss/postcss-import/issues/187#issuecomment-298078080
如果要重用webpack的别名,请替换
const resolver = ResolverFactory.createResolver({
alias: {
'@blabla': path.resolve(__dirname, 'src')
},
extensions: ['.css'],
modules: ['src', 'node_modules'],
useSyncFileSystemCalls: true,
fileSystem
});
同
const webpackBaseConfig = require('./webpack.config.base').default;
const resolver = ResolverFactory.createResolver(
Object.assign({},
webpackBaseConfig.resolve, {
modules: ['src', 'node_modules'],
useSyncFileSystemCalls: true,
fileSystem
})
);
目前,有一个库postcss-import-resolver来管理 module.css 文件中的别名。
在webpack.config.js
:
import path from 'path';
import resolver from 'postcss-import-resolver';
...
{
loader: 'postcss-loader',
options: {
plugins: {
'postcss-import': {
resolve: resolver({
alias: {
'@common': path.resolve('./src/common/styles')
},
})
}
}
}
在css
文件中:
@import '@common/variables';
div {
background-color: var(--common-var); // variable from './src/common/styles/variables.css'
}
另外,请确保postcss-import
是第一个插件。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.