当我们用angular cli创建项目后,会发现虽然项目中使用了webpack,但并没有webpack的相关配置。
其实不是没有,只是被隐藏起来了而已。
那么问题就来了,如果angular cli使用的默认webpack配置无法满足我们的需求时,怎么办呢?
此时,要么是放弃,转用其他路子,要么是用eject把webpack配置暴露出来。
对于高级玩家,eject肯定没问题,但对于非高级玩家,难道只能放弃了?
不,其实我们还是有方法可以不用eject也能实现一些高级配置的,当然这个方法中级玩家可以考虑,初级玩家最好搬个小凳子在旁边嗑瓜子看看。
话不多说,下面通过实际说明,实现免eject使用pug及stylus插件。
首先,我们需要安装一个依赖,npm install angular-app-rewired,然后在项目根目录建立一个叫ng-rewired.js的文件,内容如下:
var stylusLoader = require('stylus-loader');
module.exports = {
getCommonConfig: function (config) {
config.module.rules.push({
test: /\.pug$/,
use: [
'apply-loader',
'pug-loader'
]
});
},
getStylesConfig: function (config) {
config.plugins.push(new stylusLoader.OptionsPlugin({
default: {
include: [__dirname + '/node_modules'],
use: [require('stylus-less')()]
}
}));
}
}
然后安装对应的依赖。
pug需要npm install pug pug-loader apply-loader。
stylus插件安装对应的即可,我这里是npm install stylus-less。
光是getCommonConfig那块的代码就可以支持pug,getStylesConfig那块的代码是为了使用stylus插件。
在stylus的配置中,我包含了node_modules目录,这样就可以直接在stylus中import node_modules下的文件了;其次是使用了stylus-less插件,用于导入less的变量。
这样,只需要在stylus中import-less(‘ng-zorro-antd/src/style/themes/default’),就可以使用zorro中的$primary-color变量了。
最后,修改package.json,把start脚本和build脚本中的ng改为ng-rewired,就大功告成了!