UNPKG

@wbi/cli-service

Version:

local service for wb-cli projects

188 lines (177 loc) 5.57 kB
/** * Created by jerry.lin-wun on 2019/1/25. * webpack基础配置 */ const path = require('path') const webpack = require('webpack') const HappyPack = require('happypack') const utils = require('./utils') const wbConfig = utils.wbConfig module.exports = function (opts = {}) { // 获得static资源路径 const {staticPath, commonStaticPath} = utils.getStaticPath(opts) // 解析静态资源,将{staticPath}替换成真实的资源路径 const staticAssets = utils.copyObject(true, {}, wbConfig.staticAssets) const commonStaticAssets = utils.copyObject(true, {}, wbConfig.commonStaticAssets) utils.parseStaticAssets('{staticPath}', staticPath, staticAssets) utils.parseStaticAssets('{commonStaticPath}', commonStaticPath, commonStaticAssets) // 修改main.scss的$staticPath、$commonStaticPath路径 utils.modifyStyleStaticPath(staticPath, commonStaticPath) return { entry: { main: './src/main.js' }, output: { path: utils.resolve('./dist'), filename: 'assets/js/[name].[hash:7].js', chunkFilename: 'assets/js/[name].[hash:7].js', // 所有资源的基础路径,而且一定要以 / 结尾 // 一般建议填写 / 或者 ./ publicPath: wbConfig.publicPath.dev }, resolve: { // 使用绝对路径指明第三方模块存放的位置,以减少搜索步骤 modules: [utils.resolve('./node_modules')], // 只采用 main、jsnext:main 字段作为入口文件描述字段,以减少搜索步骤 mainFields: ['jsnext:main', 'main', 'browser'], // 别名 alias: { // 指向src路径 '@': utils.resolve('./src'), // 指向src/components '@c': utils.resolve('../componentServer/components') } }, plugins: [ new webpack.ProvidePlugin({ // jQuery: 'jquery', // $: 'jquery', Swiper: 'swiper/dist/js/swiper.js' }), // 使用happypack加速构建 /*new HappyPack({ id: 'babel', // babel-loader 支持缓存转换出的结果,通过 cacheDirectory 选项开启 loaders: ['babel-loader?cacheDirectory'] })*/ ], module: { // 设置需要被忽略解析的文件。因为这些文件没有被模块化,解析它们没意义 noParse: [/jquery.js$/, /swiper.js$/, /bootstrap\/js\/\..*js$/], // 文件匹配规则 rules: [ { test: /\.js$/, // include: [path.resolve(__dirname, '../src'), path.resolve(__dirname, '../../componentServer/components')], // 使用happypack加速构建 exclude: /node_modules|bower_components/, use: [ { loader: 'babel-loader?cacheDirectory', options: { presets: require(utils.resolveConfig('./babel.config')).presets, plugins: [ "@babel/plugin-proposal-object-rest-spread", [ "@babel/plugin-transform-runtime", { "corejs": 2 } ] ], customize: path.resolve(__dirname, './custom-babel-loader'), } } ] }, { test: /\.pug$/, include: [utils.resolve('./src'), utils.resolve('./.tmp')], use: [ { loader: 'html-loader', options: { attrs: [ ':data-src', ':data-href', ':data-pc', ':data-mb', ':srcset', 'img:src', 'link:href' ], minimize: { collapseWhitespace: false } } }, { loader: 'pug-to-html-loader', query: { data: { name: '[name]', staticPath, commonStaticPath, staticAssets, commonStaticAssets, ...wbConfig.private.sitePath, extend: wbConfig.extend }, pretty: true } } ] }, { test: /\.ico$/, use: [{ loader: 'file-loader', options: { name: 'assets/images/[name]' } }] }, { test: /\.(zip|rar|7z|pdf|doc|docx|ppt|pptx|xls|xlsx|txt)$/, use: [{ loader: 'file-loader', options: { name: 'assets/doc/[name].[hash:7].[ext]' } }] }, { test: /\.(ogv|webm|mp4|flv|ogg|mp3)$/, use: [{ loader: 'file-loader', options: { name: 'assets/media/[name].[hash:7].[ext]' } }] }, { test: /\.(jpg|jpeg|png|gif|svg|cur)$/, exclude: [utils.resolve('./src/fonts')], use: [ { loader: 'file-loader', options: { name: 'assets/images/[name].[hash:7].[ext]' } } ] }, { test: /\.(eot|svg|ttf|woff|woff2)$/, exclude: [utils.resolve('./src/images')], use: [{ loader: 'file-loader', options: { name: 'assets/fonts/[name].[ext]' } }] } ] } } }