• webpack 和 babel


    1.webpack.config.js

    var HtmlWebpackPlugin = require('html-webpack-plugin');
    var path = require('path');
    const htmlPlugin = new HtmlWebpackPlugin({
        template: path.join(__dirname, './src/index.html'),  // origin file
        filename: 'index.html'
    })
    module.exports = {
        mode: 'development', // production development
        plugins: [htmlPlugin],
        module: {  // 所有第三方模块的配置规则,loader配置
            rules: [
                { test: /.js|jsx$/, use: 'babel-loader', exclude: /node_modules/ },
                // 调用顺序从后面 css-loader 开始,再到 style-loader, ?modules 启用 css 模块化,只针对类名和id选择器
                // localIdentName 自定义生成类名格式
                // 取消模块化:global([.类名 | #id]) e.g.  :global(.content)
                // 文件模块化后:local([.类名]) 是默认的
                // 省略 node_modules 直接 import bootcss from 'bootstrap/dist/css/bootstrap.css'
                { test: /.css$/, use: ['style-loader', 'css-loader'], exclude: /node_modules/ },
                { test: /.scss$/, use: ['style-loader', 'css-loader?modules&localIdentName=[path][name]-[local]-[hash:5]', 'sass-loader'], exclude: /node_modules/ },
                { test: /.ttf|woff|woff2|eot|svg$/, use: 'url-loader'}, // 处理字体
            ]
        },
        resolve: {
            extentions: ['.js', '.jsx', '.json'], // 扩展后缀名
            alias: { //配置项目根目录
                '@': path.join(__dirname, './src')
            }
        }
    }

    2.package.join (创建 npm init -y)

    {
      "name": "react",
      "version": "1.0.0",
      "description": "",
      "main": "index.js",
      "scripts": {
        "test": "echo "Error: no test specified" && exit 1",
        "dev": "webpack-dev-server --open --port 3000 --hot --host 127.0.0.1"
      },
      "keywords": [],
      "author": "",
      "license": "ISC",
      "devDependencies": {
        "babel-core": "^6.26.3",
        "babel-loader": "^8.0.6",
        "babel-plugin-transform-runtime": "^6.23.0",
        "babel-preset-env": "^1.7.0",
        "babel-preset-react": "^6.24.1",
        "babel-preset-stage-0": "^6.24.1",
        "css-loader": "^3.4.2",
        "file-loader": "^5.1.0",
        "html-webpack-plugin": "^3.2.0",
        "style-loader": "^1.1.3",
        "url-loader": "^3.0.0",
        "webpack": "^4.42.0",
        "webpack-cli": "^3.3.11",
        "webpack-dev-server": "^3.10.3"
      }
    }

    3..babelrc

    {
        "presets": ["env", "stage-0", "react"],
        "plugins": ["transform-runtime"]
    }

     4. devServer

    devServer: { 
        //配置开发服务器
        host: "0.0.0.0",
        //是否启用热加载,就是每次更新代码,是否需要重新刷新浏览器才能看到新代码效果
        hot: true,
        //服务启动端口
        port: "8080",
        //是否自动打开浏览器默认为false
        open: false,
        //配置http代理
        proxy: { 
          "/api": { //如果ajax请求的地址是http://192.168.0.118:9999/api1那么你就可以在jajx中使用/api/api1路径,其请求路径会解析
            // http://192.168.0.118:9999/api1,当然你在浏览器上开到的还是http://localhost:8080/api/api1;
            target: "http://192.168.0.118:9999",
            //是否允许跨域,这里是在开发环境会起作用,但在生产环境下,还是由后台去处理,所以不必太在意
            changeOrigin: true,
            pathRewrite: {
                //把多余的路径置为''
              "api": ""
            }
          },
          "/api2": {//可以配置多个代理,匹配上那个就使用哪种解析方式
            target: "http://api2",
            // ...
          }
        }
    },

     5.跨域配置

    proxy: [
        {
            context: ['/user','/apis'], //使用context属性,可以把多个代理到同一个target下
            target: 'https://rsp.jd.com/', //把用 user 和 apis 开头的接口代理到 https://rsp.jd.com/域名下
            secure: false, //默认不支持运行在https上,且使用了无效证书的后端服务器,这里设置为true,可以支持
            changeOrigin: true,//如果接口跨域,需要进行这个参数配置
            pathRewrite: {'^/apis': ''},//由于apis开头的路径,是人为添加方便区分哪些接口要代理的,所以这里去掉apis
            headers: { //设置请求头
                origin: 'https://plus.m.jd.com', //请求接口限制来源,所以要改动请求源
                host: 'rsp.jd.com',//设置请求头的host
                referer: 'https://plus.m.jd.com/index'//设置请求头的referer,因为后端接口会有限制
            }
        }  
    ]

     6.vue.config.js

    // vue.config.js
    module.exports = {
        // 选项...
        // 当使用基于 HTML5 history.pushState 的路由时;
        // 当使用 pages 选项构建多页面应用时。
        baseUrl:"",
        // 当运行 vue-cli-service build 时生成的生产环境构建文件的目录。注意目标目录在构建之前会被清除 (构建时传入 --no-clean 可关闭该行为)。
        outputDir:"webApp",
        // 放置生成的静态资源 (js、css、img、fonts) 的 (相对于 outputDir 的) 目录。
        assetsDir:"assets",
        // 指定生成的 index.html 的输出路径 (相对于 outputDir)。也可以是一个绝对路径。
        indexPath:"index.html",
        // 默认情况下,生成的静态资源在它们的文件名中包含了 hash 以便更好的控制缓存。然而,这也要求 index 的 HTML 是被 Vue CLI 自动生成的。如果你无法使用 Vue CLI 生成的 index HTML,你可以通过将这个选项设为 false 来关闭文件名哈希。
        filenameHashing:true,
        // 多页面
        pages:undefined,
        // 编译警告
        lintOnSave:false,
        // 是否使用包含运行时编译器的 Vue 构建版本。设置为 true 后你就可以在 Vue 组件中使用 template 选项了,但是这会让你的应用额外增加 10kb 左右。
        runtimeCompiler:false,
        // 默认情况下 babel-loader 会忽略所有 node_modules 中的文件。如果你想要通过 Babel 显式转译一个依赖,可以在这个选项中列出来。
        transpileDependencies:[],
        // 如果你不需要生产环境的 source map,可以将其设置为 false 以加速生产环境构建。
        productionSourceMap:false,
        // 设置生成的 HTML 中 <link rel="stylesheet"> 和 <script> 标签的 crossorigin 属性。需要注意的是该选项仅影响由 html-webpack-plugin 在构建时注入的标签 - 直接写在模版 (public/index.html) 中的标签不受影响。
        crossorigin:undefined,
        // 在生成的 HTML 中的 <link rel="stylesheet"> 和 <script> 标签上启用 Subresource Integrity (SRI)。如果你构建后的文件是部署在 CDN 上的,启用该选项可以提供额外的安全性。需要注意的是该选项仅影响由 html-webpack-plugin 在构建时注入的标签 - 直接写在模版 (public/index.html) 中的标签不受影响。另外,当启用 SRI 时,preload resource hints 会被禁用,因为 Chrome 的一个 bug 会导致文件被下载两次。
        integrity:false,
        // 反向代理
        devServer:{
            // devServer: {
            //     proxy: {
            //       '/api': {
            //         target: '1',
            //         ws: true,
            //         changeOrigin: true
            //       }
            //     }
            // }
        }
    }
  • 相关阅读:
    Mysql中自增字段(AUTO_INCREMENT)的一些常识
    MyBatis动态传入表名
    Linux创建连接命令 ln -s创建软连接
    leaflet 使用turfjs实现前端自定义插值
    java后台@RequestBody和@RequestParam
    在jeecg-boot中密码的使用
    在jeecg-boot中使用代码生成器&mybatis-plus
    Pyppeteer 爬取实战
    【转】GitHub不再支持密码验证解决方案
    【转】pyppeteer+chromium手动安装Mac版本
  • 原文地址:https://www.cnblogs.com/yuqlblog/p/12448881.html
Copyright © 2020-2023  润新知