|
@@ -2,134 +2,166 @@ const path = require("path");
|
|
|
const resolve = (dir) => path.join(__dirname, dir);
|
|
|
// const SVGSpriteLoaderPlugin = require("svg-sprite-loader/plugin");
|
|
|
|
|
|
-function extendDefaultPlugins(arr) {
|
|
|
- let plug = [
|
|
|
- 'removeDoctype',
|
|
|
- 'removeXMLProcInst',
|
|
|
- 'removeComments',
|
|
|
- 'removeMetadata',
|
|
|
- 'removeEditorsNSData',
|
|
|
- 'cleanupAttrs',
|
|
|
- 'mergeStyles',
|
|
|
- 'inlineStyles',
|
|
|
- 'minifyStyles',
|
|
|
- 'cleanupIDs',
|
|
|
- 'removeUselessDefs',
|
|
|
- 'cleanupNumericValues',
|
|
|
- 'convertColors',
|
|
|
- 'removeUnknownsAndDefaults',
|
|
|
- 'removeNonInheritableGroupAttrs',
|
|
|
- 'removeUselessStrokeAndFill',
|
|
|
- 'removeViewBox',
|
|
|
- 'cleanupEnableBackground',
|
|
|
- 'removeHiddenElems',
|
|
|
- 'removeEmptyText',
|
|
|
- 'convertShapeToPath',
|
|
|
- 'convertEllipseToCircle',
|
|
|
- 'moveElemsAttrsToGroup',
|
|
|
- 'moveGroupAttrsToElems',
|
|
|
- 'collapseGroups',
|
|
|
- 'convertPathData',
|
|
|
- 'convertTransform',
|
|
|
- 'removeEmptyAttrs',
|
|
|
- 'removeEmptyContainers',
|
|
|
- 'mergePaths',
|
|
|
- 'removeUnusedNS',
|
|
|
- 'sortDefsChildren',
|
|
|
- 'removeTitle',
|
|
|
- 'removeDesc'
|
|
|
- ];
|
|
|
- return plug.concat(arr);
|
|
|
+function extendDefaultPlugins (arr) {
|
|
|
+ let plug = [
|
|
|
+ 'removeDoctype',
|
|
|
+ 'removeXMLProcInst',
|
|
|
+ 'removeComments',
|
|
|
+ 'removeMetadata',
|
|
|
+ 'removeEditorsNSData',
|
|
|
+ 'cleanupAttrs',
|
|
|
+ 'mergeStyles',
|
|
|
+ 'inlineStyles',
|
|
|
+ 'minifyStyles',
|
|
|
+ 'cleanupIDs',
|
|
|
+ 'removeUselessDefs',
|
|
|
+ 'cleanupNumericValues',
|
|
|
+ 'convertColors',
|
|
|
+ 'removeUnknownsAndDefaults',
|
|
|
+ 'removeNonInheritableGroupAttrs',
|
|
|
+ 'removeUselessStrokeAndFill',
|
|
|
+ 'removeViewBox',
|
|
|
+ 'cleanupEnableBackground',
|
|
|
+ 'removeHiddenElems',
|
|
|
+ 'removeEmptyText',
|
|
|
+ 'convertShapeToPath',
|
|
|
+ 'convertEllipseToCircle',
|
|
|
+ 'moveElemsAttrsToGroup',
|
|
|
+ 'moveGroupAttrsToElems',
|
|
|
+ 'collapseGroups',
|
|
|
+ 'convertPathData',
|
|
|
+ 'convertTransform',
|
|
|
+ 'removeEmptyAttrs',
|
|
|
+ 'removeEmptyContainers',
|
|
|
+ 'mergePaths',
|
|
|
+ 'removeUnusedNS',
|
|
|
+ 'sortDefsChildren',
|
|
|
+ 'removeTitle',
|
|
|
+ 'removeDesc'
|
|
|
+ ];
|
|
|
+ return plug.concat(arr);
|
|
|
}
|
|
|
|
|
|
// 添加less继承
|
|
|
-function addStyleResource(rule) {
|
|
|
- rule.use('style-resource')
|
|
|
- .loader('style-resources-loader')
|
|
|
- .options({
|
|
|
- patterns: [
|
|
|
- resolve('src/assets/styles/common/common.less')
|
|
|
- ]
|
|
|
- })
|
|
|
+function addStyleResource (rule) {
|
|
|
+ rule.use('style-resource')
|
|
|
+ .loader('style-resources-loader')
|
|
|
+ .options({
|
|
|
+ patterns: [
|
|
|
+ resolve('src/assets/styles/common/common.less')
|
|
|
+ ]
|
|
|
+ })
|
|
|
}
|
|
|
|
|
|
|
|
|
module.exports = {
|
|
|
- chainWebpack: (config) => {
|
|
|
-
|
|
|
- // 路径别名
|
|
|
- config.resolve.alias
|
|
|
- .set("@", resolve("src"))
|
|
|
- .set("@node", resolve("node_modules"))
|
|
|
- .set("@com", resolve("src/components"))
|
|
|
- .set("@assets", resolve("src/assets"));
|
|
|
-
|
|
|
- // less 继承
|
|
|
- const types = ['vue-modules', 'vue', 'normal-modules', 'normal'];
|
|
|
- types.forEach(type => addStyleResource(config.module.rule('less').oneOf(type)));
|
|
|
-
|
|
|
- // svg 雪碧图
|
|
|
- config.module // 排除其他svg-loader
|
|
|
- .rule('svg')
|
|
|
- .exclude.add(resolve('src/assets/icon/svg'))
|
|
|
- .end()
|
|
|
- .exclude.add(resolve('src/assets/icon/svg_fill'))
|
|
|
- .end();
|
|
|
-
|
|
|
- // svg雪碧图
|
|
|
- const svgRule = config.module.rule('icons');
|
|
|
- svgRule.test(/\.svg$/)
|
|
|
- .include.add(resolve('src/assets/icon/svg'))
|
|
|
- .end()
|
|
|
- .use('svg-sprite-loader')
|
|
|
- .loader('svg-sprite-loader')
|
|
|
- .options({
|
|
|
- symbolId: 'svg-[name]',
|
|
|
- // extract: true,
|
|
|
- // publicPath: "img/",
|
|
|
- // spriteFilename: "svg-sprite-[hash:8].svg",
|
|
|
- });
|
|
|
-
|
|
|
- // config
|
|
|
- // .plugin("svgsprite")
|
|
|
- // .use(SVGSpriteLoaderPlugin, [{
|
|
|
- // plainSprite: true
|
|
|
- // }]);
|
|
|
-
|
|
|
- // svgo 去除svg中无用元素
|
|
|
- svgRule.use('svgo-loader').loader('svgo-loader').options({
|
|
|
- plugins: extendDefaultPlugins([{
|
|
|
- name: "removeAttrs",
|
|
|
- params: {
|
|
|
- attrs: 'fill',
|
|
|
- }
|
|
|
- }])
|
|
|
- });
|
|
|
-
|
|
|
- // svg雪碧图 不去除fill属性
|
|
|
- // const svgRuleFill = config.module.rule('icons_fill');
|
|
|
- // svgRuleFill.test(/\.svg$/)
|
|
|
- // .include.add(resolve('src/assets/icon/svg_fill'))
|
|
|
- // .end()
|
|
|
- // .use('svg-sprite-loader')
|
|
|
- // .loader('svg-sprite-loader')
|
|
|
- // .options({
|
|
|
- // symbolId: 'fill-[name]',
|
|
|
- // // extract: true,
|
|
|
- // // publicPath: "img/",
|
|
|
- // // spriteFilename: "svg-sprite-[hash:8].svg",
|
|
|
- // });
|
|
|
-
|
|
|
- // // config
|
|
|
- // // .plugin("svgsprite")
|
|
|
- // // .use(SVGSpriteLoaderPlugin, [{
|
|
|
- // // plainSprite: true
|
|
|
- // // }]);
|
|
|
-
|
|
|
- // // svgo 去除svg中无用元素
|
|
|
- // svgRuleFill.use('svgo-loader').loader('svgo-loader').options({
|
|
|
- // plugins: extendDefaultPlugins([])
|
|
|
- // });
|
|
|
-
|
|
|
- },
|
|
|
+
|
|
|
+ publicPath: "./", // 默认'/',部署应用包时的基本 URL
|
|
|
+ indexPath: 'index.html', // 相对于打包路径index.html的路径
|
|
|
+ outputDir: 'dist', // 'dist', 生产环境构建文件的目录
|
|
|
+ assetsDir: 'static', // 相对于outputDir的静态资源(js、css、img、fonts)目录
|
|
|
+ lintOnSave: false, // 是否在开发环境下通过 eslint-loader 在每次保存时 lint 代码
|
|
|
+ runtimeCompiler: true, // 是否使用包含运行时编译器的 Vue 构建版本
|
|
|
+
|
|
|
+ chainWebpack: (config) => {
|
|
|
+
|
|
|
+ config.resolve.symlinks(true); // 修复热更新失效
|
|
|
+
|
|
|
+ // 路径别名
|
|
|
+ config.resolve.alias
|
|
|
+ .set("@", resolve("src"))
|
|
|
+ .set("@node", resolve("node_modules"))
|
|
|
+ .set("@com", resolve("src/components"))
|
|
|
+ .set("@assets", resolve("src/assets"))
|
|
|
+ .set("@api", resolve("src/api"))
|
|
|
+ .set("@store", resolve("src/store"))
|
|
|
+ .set("@modeConfig", resolve("public/static/config"))
|
|
|
+ .set("@tools", resolve("src/tools"));
|
|
|
+
|
|
|
+ // less 继承
|
|
|
+ const types = ['vue-modules', 'vue', 'normal-modules', 'normal'];
|
|
|
+ types.forEach(type => addStyleResource(config.module.rule('less').oneOf(type)));
|
|
|
+
|
|
|
+ // svg 雪碧图
|
|
|
+ config.module // 排除其他svg-loader
|
|
|
+ .rule('svg')
|
|
|
+ .exclude.add(resolve('src/assets/icon/svg'))
|
|
|
+ .end()
|
|
|
+ .exclude.add(resolve('src/assets/icon/svg_fill'))
|
|
|
+ .end();
|
|
|
+
|
|
|
+ // svg雪碧图
|
|
|
+ const svgRule = config.module.rule('icons');
|
|
|
+ svgRule.test(/\.svg$/)
|
|
|
+ .include.add(resolve('src/assets/icon/svg'))
|
|
|
+ .end()
|
|
|
+ .use('svg-sprite-loader')
|
|
|
+ .loader('svg-sprite-loader')
|
|
|
+ .options({
|
|
|
+ symbolId: 'svg-[name]',
|
|
|
+ // extract: true,
|
|
|
+ // publicPath: "img/",
|
|
|
+ // spriteFilename: "svg-sprite-[hash:8].svg",
|
|
|
+ });
|
|
|
+
|
|
|
+ // config
|
|
|
+ // .plugin("svgsprite")
|
|
|
+ // .use(SVGSpriteLoaderPlugin, [{
|
|
|
+ // plainSprite: true
|
|
|
+ // }]);
|
|
|
+
|
|
|
+ // svgo 去除svg中无用元素
|
|
|
+ svgRule.use('svgo-loader').loader('svgo-loader').options({
|
|
|
+ plugins: extendDefaultPlugins([{
|
|
|
+ name: "removeAttrs",
|
|
|
+ params: {
|
|
|
+ attrs: 'fill',
|
|
|
+ }
|
|
|
+ }])
|
|
|
+ });
|
|
|
+
|
|
|
+ // svg雪碧图 不去除fill属性
|
|
|
+ // const svgRuleFill = config.module.rule('icons_fill');
|
|
|
+ // svgRuleFill.test(/\.svg$/)
|
|
|
+ // .include.add(resolve('src/assets/icon/svg_fill'))
|
|
|
+ // .end()
|
|
|
+ // .use('svg-sprite-loader')
|
|
|
+ // .loader('svg-sprite-loader')
|
|
|
+ // .options({
|
|
|
+ // symbolId: 'fill-[name]',
|
|
|
+ // // extract: true,
|
|
|
+ // // publicPath: "img/",
|
|
|
+ // // spriteFilename: "svg-sprite-[hash:8].svg",
|
|
|
+ // });
|
|
|
+
|
|
|
+ // // config
|
|
|
+ // // .plugin("svgsprite")
|
|
|
+ // // .use(SVGSpriteLoaderPlugin, [{
|
|
|
+ // // plainSprite: true
|
|
|
+ // // }]);
|
|
|
+
|
|
|
+ // // svgo 去除svg中无用元素
|
|
|
+ // svgRuleFill.use('svgo-loader').loader('svgo-loader').options({
|
|
|
+ // plugins: extendDefaultPlugins([])
|
|
|
+ // });
|
|
|
+
|
|
|
+ },
|
|
|
+
|
|
|
+ // devServer: {
|
|
|
+ // //代理配置
|
|
|
+ // proxy: {
|
|
|
+ // '/lightmatrix': {
|
|
|
+ // target: 'https://h5.caibeike.com.cn/', // 请求地址
|
|
|
+
|
|
|
+ // changeOrigin: true, // 在vue-cli3中,默认changeOrigin的值是true,意味着服务器host设置成target,这与vue-cli2不一致,vue-cli2这个默认值是false
|
|
|
+ // // changeOrigin的值是true,target是host, request URL是http://baidu.com
|
|
|
+ // // 如果设置changeOrigin: false,host就是浏览器发送过来的host,也就是localhost:8082。
|
|
|
+
|
|
|
+ // pathRewrite: { // 路径重写,eg:把api接口替换为''
|
|
|
+ // '^/h5.caibeike.com.cn/': 'localhost:8888/'
|
|
|
+ // }
|
|
|
+ // }
|
|
|
+ // },
|
|
|
+ // open: false, // 是否打开浏览器
|
|
|
+ // }
|
|
|
}
|