ES6+轉ES5(webpack+babel、指定多個js文件、自動註入)

来源:https://www.cnblogs.com/puyongsong/archive/2019/12/22/12080184.html
-Advertisement-
Play Games

接續上篇ES6+轉ES5,本篇將使用webpack和babel將多個不同目錄下指定的多個ES6+語法的js文件編譯為ES5,並將編譯後的文件配置註入對應的html文件。 所需環境node、npm、設置淘寶鏡像請參考上篇進行安裝,地址:https://www.cnblogs.com/puyongson ...


  接續上篇ES6+轉ES5,本篇將使用webpack和babel將多個不同目錄下指定的多個ES6+語法的js文件編譯為ES5,並將編譯後的文件配置註入對應的html文件。
  所需環境node、npm、設置淘寶鏡像請參考上篇進行安裝,地址:https://www.cnblogs.com/puyongsong/p/12036090.html

一、新建項目,目錄如下

二、執行命令初始化項目

  cnpm init -y
  執行成功後會生成文件:package.json

三、執行命令安裝webpack

  cnpm install webpack --save-dev
  (有個坑)在webpack3中,webpack本身和它的CLI以前都是在同一個包中,但在第4版中,兩者已分開管理,所以要單獨安裝其腳手架。
  執行命令安裝webpack-cli
  cnpm install webpack-cli --save-dev

四、執行命令安裝以下3個用於處理js的包

  cnpm install --save-dev babel-loader @babel/core @babel/preset-env
  babel-loader:對使用了ES2015+語法的.js文件進行處理。
  babel-core:提供一系列api。當webpack使用babel-loader處理文件時,babel-loader就調用了babel-core的api。
  babel-preset-env:告訴babel使用哪種轉碼規則進行文件處理。babel有幾種規則都可以實現對ES6語法的轉碼,如babel-preset-es2015、babel-preset-latest、babel-preset-env,不過官方現已建議採用babel-preset-env。

五、執行命令安裝全局墊片插件:

  cnpm install babel-polyfill --save-dev

六、執行命令安裝局部墊片插件:

  cnpm install @babel/runtime --save-dev
  cnpm install @babel/plugin-transform-runtime --save-dev
  墊片:Babel預設只轉換新的JavaScript句法(syntax),而不轉換新的API,比如Iterator、Generator、Set、Maps、Proxy、Reflect、Symbol、Promise等全局對象,以及一些定義在全局對象上的方法(比如Object.assign)都不會轉碼。舉例來說,ES6在Array對象上新增了Array.from方法。Babel就不會轉碼這個方法。如果想讓這個方法運行,必須使用babel-polyfill,為當前環境提供一個墊片。

七、根目錄下新建文件:webpack.config.js

  這個js配置文件的註意事項我都寫上了註釋,後面我會將其全部內容貼上來。

八、根目錄下建一個.babelrc文件,內容為

{
    "presets": [
        ["@babel/preset-env", {
            "targets": {
                "browsers": ["> 1%", "last 2 versions"]
            }
        }]
    ],
    "plugins": ["@babel/transform-runtime"]
}

  意思是打包後的代碼要支持1%以上的瀏覽器並支持瀏覽器的上2個版本
  此時執行命令webpack就可以了

九、想要配置為html文件自動註入所以生成的包還需要安裝以下插件

  執行命令安裝html-webpack-plugin插件
  cnpm install html-webpack-plugin --save-dev
  安裝完成後執行webpack即可
  註意:如果webpack打包時報錯Cannot find module 'webpack/lib/node/NodeTemplatePlugin'
  解決辦法
  執行命令cnpm link webpack --save-dev
  然後在執行webpack就可以了
  附上最後生成文件後的目錄結構圖:

附上webpack.config.js全部內容 

//為了使用插件,需要將require()其添加到plugins陣列中。使用new運算符調用插件來創建插件的實例。
const HtmlWebpackPlugin = require('html-webpack-plugin');
const webpack = require('webpack'); // 用於訪問內置插件
const path = require('path');
module.exports = {
    entry: { //入口配置
        index: './src/index.js',
        ctrl: './ctrls/ctrl.js'
    },
    // 這裡[]里的name就是app和search也就是entry里的key值 
    //  這裡[hash:5]會隨機生成一個版本號作為你的打包js版本 
    //  建議最後一次打包才加上.[hash:5] 否則每次打包都同一個文件都會生成新的版本號不同的文件
    output: { //出口配置
        // filename: '[name].[hash:5].js',
        filename: '[name].js',
        path: __dirname + '/dist' // 生成新文件的地址
    },
    module: {
        rules: [{
            test: /(\.jsx|\.js)$/, // 處理以.jsx或.js結尾的文件
            use: {
                loader: "babel-loader", // 用babel-loader處理
                options: {
                    "presets": [
                        ["@babel/preset-env", {
                            "targets": {
                                "browsers": ["> 1%", "last 2 versions"]
                            }
                        }]
                    ]
                }
            }
        }]
    },
    //html-webpack-plugin生成器通過自動註入所有生成的包為應用程式生成HTML文件
    plugins: [
        new HtmlWebpackPlugin({ // 地址為output對應的path地址dist
            template: './src/index.html', //處理模板
            filename: '../index.html' //生成模板
            // 無chunks參數預設全部註入
        }), new HtmlWebpackPlugin({
            template: './src/a.html', //處理模板
            filename: '../views/view1.html', //生成模板
            chunks: ['index'] // 只引入index.js
        })
    ]
}

共勉,望鞭策!


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 細說Spark Streaming和Structured Streaming的區別 ...
  • Android4.4開發項目中的webview在Android各個版本運行的飛起,可是項目升級,最低版本適配5.0之後,webview各種閃退問題 真讓人頭大!!!!!!!!!!!!!!! 啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊我太難了! 仔細對比了兩個項目的差異,有所發現: Android5.0的buil ...
  • 一、絕對定位參考點 1.規律: (1)預設情況下所有的絕對定位的元素,無論有沒有祖先元素,都會以body作為參考點。 <style> .box1{ width: 300px; height: 300px; background-color: red; /*position:absolute;*/ / ...
  • 養成良好的編碼習慣,提高代碼的可維護性 避免定義全局變數或函數 避免定義全局變數或函數 定義全局的變數和函數,會影響代碼的可維護性。如果在頁面中運行的javascript 代碼是在相同的作用域裡面,那就可能代碼之間存在互相影響的可能性。 有很多種手段可以解決因為定義了全局變數而導致代碼"污染"的問題 ...
  • 案例:開機動畫 由上下兩部分組成,先下麵的高變為0 ,再最大的div寬為0,形成一個縮小到沒有的動畫效果 點擊的X是在背景圖上的,在上面設置了一個空的span用於註冊點擊事件 <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> ...
  • 案例:手風琴 封裝好的動畫函數在common.js裡面 //function getStyle(element, attr) {...} //function animate(element, json, fn) {...} 手風琴設置的是背景圖嗎,backgroudImage="url(image ...
  • 圖文結合深入理解 JS 中的 this 值 在 中最常見的莫過於函數了,在函數(方法)中 的出現頻率特別高,那麼 到底是什麼呢,今天就和大家一起學習總結一下 中的 。 1. 初探this 在 中是一個關鍵字,不是變數也不是屬性名, 中不允許給this賦值。 它是函數運行時,在函數體內部自動生成的一個 ...
  • 聊一聊 JS 輸出為 [object object] 是怎麼回事? 今天在學習ES6中的 數據類型時,在寫demo時控制台輸出為 ,當時有點疑惑,查閱了相關資料後搞清楚了其中的原因。 在解釋之前,由於有些小伙伴可能還沒有接觸過ES6,所以先說一下上面用到的ES6的一些特性: const: 聲明一個常 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...