摘要:當然,我們需要先下載配置下載和配置下載下載的加載器下載完了,要去進行配置,配置完的文件如下可以看到,和之前的相比,增加了一個的配置。
準備
下載Node.js和npm
一個命令行工具(我的是git bash)。不是必須的,用自帶的命令行也可以。
創建一個文件夾,作為根目錄,比如 npm-webpack-es6
這時,你將看到一個空文件夾
開始命令行打開至根目錄
鍵入 npm init,一路確定到yes ————————創建一個package.json。
文件夾如左
package.json 內部如左
安裝webpack安裝webpack前,先附上幾個常用的npm命令
npm init 這個指令會引導你創建一個package.json,包括版本作者等信息,有助于你發包。后面安裝的包的依賴關系也會在package.json里有體現。 npm install 直接執行這個命令,會按照當前目錄下的package.json的配置去安裝各個依賴的包。 npm install [module] 在當前目錄安裝這個模塊。會去檢測該模塊是否存在于node_module文件夾中,存在了就不安裝了。 npm install [module] -g 在全局進行模塊安裝。全局模式下安裝的包,會自動注冊到系統變量 path里的。 npm install [module] --save-dev 在當前目錄下安裝這個模塊,但是僅在開發時使用。在package的"devDependencies"下,表示僅在開發的時候使用。 有一些包是需要用命令行的,這些需要注冊系統變量,因此像supervisor等包,一定要安裝在全局。否則就不能用它的命令行指令。 有一些包是在js中使用的,那么這些包安裝到當前目錄就可以了。 webpack 一般建議全局安一個,當前目錄安一個。
我們剛才已經使用了npm init創建了一個package.json,接下來我們開始安裝webpack。
首先在全局安裝一個webpack
執行 npm install webpack -g (已經全局安裝webpack 的可以跳過這一步)
然后在當前目錄下安裝一個webpack
執行 npm install webpack --save
你會發現當前目錄下新增了一個文件夾node_module,在里頭有著webpack的包
檢驗下,webpack 安裝成功了沒
執行 webpack -v
如果webpack安裝成功了,就會在命令行打印出webpack的版本和幫助。
如果失敗了,檢測一下有沒有在全局安裝webpack。
當你執行到這步,你的文件夾長這個樣子
--npm-webpack-es6 --package.json --node_module --webpack
package.json長這個樣子
{ "name": "npm-webpack-es6", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "test": "echo "Error: no test specified" && exit 1" }, "author": "", "license": "ISC", "devDependencies": { "webpack": "^1.13.2" } }使用webpack來組織文件
在直接介紹使用es6模塊化語言來組織文件之前,我們先了解一下webpack的使用。
webpack會將我們用模塊化語言語法寫成的源文件,編譯成瀏覽器可識別的文件。也就是有從源文件→線上文件的過程。
我們來實踐一下:
首先在根目錄下創建一個文件夾src來放源文件;
再創建一個文件夾dist來放編譯后文件;
新建一個html文件來放html文件
最后創建一個webpack.config.js。 (先創個空的,待會兒加內容)
這時你的目錄結構將如下:
webpack.config.js是webpack的配置文件。
要搞懂webpack其實就是要懂得怎么來配置 webpack.config.js。
本文介紹一個基礎的配置,完整的配置教程請參照官網文檔——webpack官網文檔。
接下來:
在src中新建一個文件—— sourceFile.js
文件內容,隨意點:
//sourceFile.js console.log("我是superman");
配置 webpack.config.js (關鍵一步)
module.exports = { entry:{ bundle : __dirname + "/src/sourceFile.js" }, output:{ path: __dirname + "/dist", filename: "[name].js" } }
這個文件僅有entry和output,應該是最簡單的配置文件了。
module.exports 是CommonJS的寫法,這個是Node.js的規范
__dirname 代表當前目錄,Node.js會去識別
entry中,值為一個路徑,代表源文件的存放位置。鍵,則可以隨便取,在我的配置中,編譯后文件的名字就是這里的鍵。
output中,path為編譯后的文件存放的文件夾。 filename 為編譯后文件夾名字。 其中[name]代表了entry中的鍵。也就是說上面是什么名字,編譯后就是什么名字??梢宰约涸囼炏?。
使用webpack進行編譯
在命令行鍵入 webpack -w
成功編譯的話,命令行的顯示
同時在dist中會新出現一個 bundle.js, 代碼長這個樣子:
/******/ (function(modules) { // webpackBootstrap /******/ // The module cache /******/ var installedModules = {}; /******/ // The require function /******/ function __webpack_require__(moduleId) { /******/ // Check if module is in cache /******/ if(installedModules[moduleId]) /******/ return installedModules[moduleId].exports; /******/ // Create a new module (and put it into the cache) /******/ var module = installedModules[moduleId] = { /******/ exports: {}, /******/ id: moduleId, /******/ loaded: false /******/ }; /******/ // Execute the module function /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); /******/ // Flag the module as loaded /******/ module.loaded = true; /******/ // Return the exports of the module /******/ return module.exports; /******/ } /******/ // expose the modules object (__webpack_modules__) /******/ __webpack_require__.m = modules; /******/ // expose the module cache /******/ __webpack_require__.c = installedModules; /******/ // __webpack_public_path__ /******/ __webpack_require__.p = ""; /******/ // Load entry module and return exports /******/ return __webpack_require__(0); /******/ }) /************************************************************************/ /******/ ([ /* 0 */ /***/ function(module, exports) { console.log("我是superman"); /***/ } /******/ ]);
可以看到編譯后的js多了很多額外的內容,所以如果項目小的話是不需要模塊化的。模塊化是用來構建中大型項目的。
來看看效果
在html文件夾下新建一個 test.html
看看我們編譯后的js可不可以用
在瀏覽器打開test.html,你會看到瀏覽器的console中:
說明我們將源文件sourceFile.js編譯后生成的bundle.js,是可以正常使用的。
疑惑
這樣子做的話,和html中直接引用源文件效果是一樣的啊。話說為什么要編譯啊?這樣不是更麻煩嗎?
這是我剛接觸webpack的感受。后來,我逐步理解了,編譯其實是為了實現模塊化。基于AMD/CMD/CommonJS/es6的語法,瀏覽器是無法識別的。這些規范的語法,你可以感受一下:
//AMD require(["moduleA", "moduleB", "moduleC"], function (moduleA, moduleB, moduleC) { alert("加載成功"); }); //CMD seajs.use("../static/hello/src/main") //CommonJS module.export = { name:"rouwan" } //es6模塊 import {module1, module2} form "./module.js";
這些規范使用的語法,瀏覽器是不能識別的。不信你試一下,立馬報錯。除非未來幾年,瀏覽器支持es2015的import和export。因此,需要由webpack來編譯,編譯后的文件,瀏覽器能夠識別。
現在,我們開始使用es6模塊語法來組織模塊吧
使用es6模塊語法webpack可以支持es6語法。這個也是為什么webpack強大的原因。用es6a ,想想就爽。
當然,我們需要先下載配置babel
下載和配置babel
下載babel:
npm install --save-dev babel-loader babel-core babel-preset-es2015 //下載babel的webpack加載器
下載完了,要去webpack.config.js進行配置,配置完的文件如下:
module.exports = { entry:{ bundle : __dirname + "/src/sourceFile.js" }, output:{ path: __dirname + "/dist", filename: "[name].js" }, module:{ loaders:[{ test: /.js$/, loader: "babel?presets=es2015" }] } }
可以看到,和之前的webpack.config.js相比,增加了一個loaders的配置。
大致意思是:所有的js文件,使用babel加載器來翻譯一下
具體配置原理可查官網文檔 loader的api
怎么看自己是否配置好呢?待會兒webpack編譯時看有沒有報錯,瀏覽器端有沒有識別es6語法就知道了。
開始使用es6模塊
在src文件夾下新建一個文件——moduleTest.js
//moduleTest.js function say(){ console.log("我引用了一個模塊") } export {say}
將sourceFile.js的內容改為:
//sourceFile.js import {say} from "./moduleTest.js"; say();
在命令行運行webpack編譯指令
webpack -w
如果沒有報錯,先開心一下。嘿嘿。
別急,先去打開test.html看看,如果你看到了命令行成功打印
那么,恭喜你,這個demo完整地跑完了。
結語前端工程化是大勢所趨,我們將不再人工去實現 依賴管理,代碼壓縮混淆,測試,上線等開發流程,轉而交由工具去完成。這些工具中,npm作為優秀的包管理工具,節省了我們在搜索各個庫的官網下載庫的時間,方便我們進行包的下載,更新,和依賴管理;webpack作為優秀的模塊化構建工具,支持多種模塊化規范,并能將css/字體/圖片作為模塊管理,編譯各類js方言,有著豐富的插件,已經超出了一個模塊加載器的范圍,成為了一款強大的前端構建工具。
本文僅僅介紹了一個最簡單的demo,因為我也正在學習中。詳細的資料,還是要去看文檔并實踐,這里給出幾個傳送門以便大家詳細了解npm/webpack/es6模塊的知識。
npm常用指令
webpack官方文檔
阮一峰的ECMA6入門——es6模塊
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/80431.html
摘要:安裝寫在里安裝和配置和之前一樣用來處理文件相關的這個包括的就比較多,有,后面兩個是為了寫和服務。 這兩天學習了一些webpack的知識,loaders+plugins真的很強大!不過配置起來也很復雜,看了一些文章,自己也寫了項目練手,寫下來加深自己的印象。 首先,非常非常推薦的幾篇文章,初學者一定要看!http://www.jianshu.com/p/42e1...(標題一點也不夸張,...
摘要:它能夠使得在不刷新瀏覽器的情況下,更改本地的前端代碼組件,瀏覽器自動更新預覽。直接集成了這項技術,而且建立了專門的通道進行錯誤的實時反饋。命令行提供了三個主要的命令,。服務器關于服務器,其實是內部起了一個基于的服務器,外加進行消息的通訊。 跟著初探了下flintjs,的確會很棒,超級熱更新! 學習地址: http://frontenddev.org/link/ali-11-11-...
摘要:確保在和環境下,如果沒有,先安裝環境。我的新建一個文件夾,在命令行里進入執行此時,文件夾下多了一個文件。本文僅獻給初學的同學,功能強大,想要學好仍需多多學習。 1、確保在node和npm環境下,如果沒有,先安裝node環境。我的node: showImg(https://segmentfault.com/img/bVbu1T2); 2、新建一個文件夾web,在命令行里進入web,執行 ...
摘要:前言前端模塊化,主要是解決兩個問題命名空間沖突,文件依賴管理。目前解決的方法是模塊化命名空間各個模塊的命名空間獨立。模塊化構建工具,等是用來組織前端模塊的構建工具加載器。 前言 前端模塊化,主要是解決兩個問題——命名空間沖突,文件依賴管理。 坑___命名空間沖突 我自己測試好的代碼和大家合并后怎么起沖突了? 頁面腳本的變量或函數覆蓋了公有腳本的。 坑___文件依賴管理 明明項目需...
摘要:引用網上一作者的話將前端項目當成一項系統工程進行分析組織和構建從而達到項目結構清晰分工明確團隊配合默契開發效率提高的目的。提示,是因為缺少這個文件。 前端工程化 在網頁比較簡單的時代,以文件可以包含 HTML、CSS、JS;到后來結構、樣式、行為的分離,文件開始多起來,慢慢的出現了AMD,CMD ,CommonJS,ES6 Module等,技術變化日新月異,把這些技術統一整合起來,就是...
閱讀 4751·2021-11-15 11:39
閱讀 2698·2021-11-11 16:55
閱讀 2206·2021-10-25 09:44
閱讀 3510·2021-09-22 16:02
閱讀 2441·2019-08-30 15:55
閱讀 3129·2019-08-30 13:46
閱讀 2670·2019-08-30 13:15
閱讀 1958·2019-08-30 11:12