1.2.9 • Published 4 years ago

beauty-webpack v1.2.9

Weekly downloads
2
License
MIT
Repository
-
Last release
4 years ago

Beauty-webpack

NPM GitHub package.json version

Motive

快速搭建前端项目,减少webpack配置学习成本

Install

npm install beauty-webpack --save-dev

Usage

命令

//package.json
{
  "script": {
      //开发
      "start": "beauty start",
      //打包
      "build": "beauty build",
      //分析
      "analyze": "beauty analyze"
  }
}

Spa项目

目录结构

.
+-- src
|   +-- ...
|   +-- index.(js|jsx)

入口文件

//src/index.js
import React from 'react'
import ReactDOM from 'react-dom'

const Home=()=><div>Home</div>

ReactDOM.render(<Home/>, document.querySelector('#root'))

Mpa项目

目录结构

.
+-- src
|   +-- ...
|   +-- activity
|       +-- index.(js|jsx)
|   +-- home
|       +-- index.(js|jsx)

入口文件

//src/(folder)/index.js
import React from 'react'
import ReactDOM from 'react-dom'

const Home=()=><div>Home</div>

ReactDOM.render(<Home/>, document.querySelector('#root'))

配置文件

允许自定义添加配置文件修改webpack配置 需要在根目录添加.beautyrc.js文件

属性

属性说明备注
entry入口配置(只限Spa项目)参考webpack entry
output输出配置参考webpack output
publicPath文件输出目录参考webpack publicPath
isExtractCss是否提取公共样式
alias别名默认@为src文件夹
splitChunks分包策略参考webpack splitChunks
chunksjs分包模块配合entry
define定义项目全局变量参考webpack define
devServer开发服务器配置参考webpack devServer
title输出页面的title
port开发服务器端口号默认值:3000
open开发服务器编译完成是否立即打开页面
babelPluginsbabel插件引入babelPlugins: [["import", {"libraryName": "antd","libraryDirectory": "es","style": true // `style: true` 会加载 less 文件}]]
isCssModule是否开启css module默认值:true

isRem|是否启用rem|默认值:true rootFontSize|根元素字体大小|默认值:75

配置文件例子

//.beautyrc.js
const path = require('path')
const PREFIX = process.env.PREFIX
const env = process.env.NODE_ENV

module.exports = {
    entry: {
        track: path.resolve(__dirname, './src/utils/track'),
        beauty: ['@babel/polyfill', path.resolve(__dirname, './src/index')]
    },
    chunks: ['vendor', 'beauty', 'track'],
    isExtractCss: env !== 'development',
    define: {
        "process.env.BASE_NAME": JSON.stringify(PREFIX || '')
    },
    splitChunks: {
        maxAsyncRequests: Infinity,
        maxInitialRequests: Infinity,
        minSize: 10000,
        cacheGroups: {
            vendor: {
                name: 'vendor',
                chunks: 'all',
                test: /[\\/]node_modules[\\/](react|react-dom)[\\/]/,
            },
            clipboard: {
                name: 'clipboard',
                chunks: 'all',
                test: /[\\/]node_modules[\\/](clipboard)[\\/]/,
            }
        }
    }
}

模版文件

默认有模板文件,需要自定义可以在src目录下添加document.ejs 配置参数参考html-webpack-plugin

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8"/>
    <meta http-equiv="X-UA-Compatible" content="IE=edge"/>
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1.0, user-scalable=0"/>
    <script src="//web-cdn.meilly.cn/stash/flexible.js"></script>
    <title><%= htmlWebpackPlugin.options.title %></title>
    <link rel="icon" href="/favicon.png" type="image/x-icon"/>
</head>
<body>
<noscript>Sorry, we need js to run correctly!</noscript>
<div id="root">
</div>
<% htmlWebpackPlugin.files.js.forEach(function(js) { %>
    <script src="<%= js %>"></script>
<% }) %>
<% if(webpackConfig.mode === 'production') { %>
    <script defer
            src="https://jic.talkingdata.com/app/h5/v1?appid=2F65664B662A4C80A0F941774CFD28FB&vn=mellyv1.0&vc=2.7.1"></script>
<% } %>
</body>
</html>