當前位置:首頁 » 編程軟體 » webpack自動編譯

webpack自動編譯

發布時間: 2024-02-26 21:18:15

❶ webpack編譯less

webpack loaders

webpack 編譯 less 需要使用到的 loader :

* less-loader
將 less 文件編譯成 CSS ;

1.創建本地項目 webpack-demo

2.在 webpack-demo 的根目錄下創建 package.json 文件

模塊說明:

4.修改 package.json 文件的 scripts 屬性值,進行打包資源的配置

5.安裝需要的loader和依賴

6.創建一個名為 test.less 的文件

並將該文件引入 webpack 的入口文件 entry.js 中;

7.配置編譯 less 的 loader

7.運行編譯命令

❷ Webpack 怎麼用

1. 為什麼用 webpack?
他像 Browserify, 但是將你的應用打包為多個文件. 如果你的單頁面應用有多個頁面, 那麼用戶只從下載對應頁面的代碼. 當他么訪問到另一個頁面, 他們不需要重新下載通用的代碼.
他在很多地方能替代 Grunt 跟 Gulp 因為他能夠編譯打包 CSS, 做 CSS 預處理, 編譯 JS 方言, 打包圖片, 還有其他一些.
它支持 AMD 跟 CommonJS, 以及其他一些模塊系統, (Angular, ES6). 如果你不知道用什麼, 就用 CommonJS.
2. Webpack 給 Browserify 的同學用
對應地:
browserify main.js > bundle.js

webpack main.js bundle.js

Webpack 比 Browserify 更強大, 你一般會用 webpack.config.js 來組織各個過程:
// webpack.config.js
mole.exports = {
entry: './main.js',
output: {
filename: 'bundle.js'
}
};

這僅僅是 JavaScript, 可以隨意添加要運行的代碼.
3. 怎樣啟動 webpack
切換到有 webpack.config.js 的目錄然後運行:
webpack 來執行一次開發的編譯
webpack -p for building once for proction (minification)
webpack -p 來針對發布環境編譯(壓縮代碼)
webpack --watch 來進行開發過程持續的增量編譯(飛快地!)
webpack -d 來生成 SourceMaps
4. JavaScript 方言
Webpack 對應 Browsserify transform 和 RequireJS 插件的工具稱為 loader. 下邊是 Webpack 載入 CoffeeScript 和 Facebook JSX-ES6 的配置(你需要 npm install jsx-loader coffee-loader):
// webpack.config.js
mole.exports = {
entry: './main.js',
output: {
filename: 'bundle.js'
},
mole: {
loaders: [
{ test: /\.coffee$/, loader: 'coffee-loader' },
{ test: /\.js$/, loader: 'jsx-loader?harmony' } // loaders 可以接受 querystring 格式的參數
]
}
};

要開啟後綴名的自動補全, 你需要設置 resolve.extensions 參數指明那些文件 Webpack 是要搜索的:
// webpack.config.js
mole.exports = {
entry: './main.js',
output: {
filename: 'bundle.js'
},
mole: {
loaders: [
{ test: /\.coffee$/, loader: 'coffee-loader' },
{ test: /\.js$/, loader: 'jsx-loader?harmony' }
]
},
resolve: {
// 現在可以寫 require('file') 代替 require('file.coffee')
extensions: ['', '.js', '.json', '.coffee']
}
};

5. 樣式表和圖片
首先更新你的代碼用 require() 載入靜態資源(就像在 Node 里使用 require()):
require('./bootstrap.css');
require('./myapp.less');

var img = document.createElement('img');
img.src = require('./glyph.png');

當你引用 CSS(或者 LESS 吧), Webpack 會將 CSS 內聯到 JavaScript 包當中, require() 會在頁面當中插入一個 `<style>標簽. 當你引入圖片, Webpack 在包當中插入對應圖片的 URL, 這個 URL 是由require()` 返回的.
你需要配置 Webpack(添加 loader):
// webpack.config.js
mole.exports = {
entry: './main.js',
output: {
path: './build', // 圖片和 JS 會到這里來
publicPath: 'http://mycdn.com/', // 這個用來成成比如圖片的 URL
filename: 'bundle.js'
},
mole: {
loaders: [
{ test: /\.less$/, loader: 'style-loader!css-loader!less-loader' }, // 用 ! 來連接多個人 loader
{ test: /\.css$/, loader: 'style-loader!css-loader' },
{test: /\.(png|jpg)$/, loader: 'url-loader?limit=8192'} // 內聯 base64 URLs, 限定 <=8k 的圖片, 其他的用 URL
]
}
};

6. 功能開關
有些代碼我們只想在開發環境使用(比如 log), 或者 dogfooging 的伺服器里邊(比如內部員工正在測試的功能). 在你的代碼中, 引用全局變數吧:
if (__DEV__) {
console.warn('Extra logging');
}
// ...
if (__PRERELEASE__) {
showSecretFeature();
}

然後配置 Webpack 當中的對應全局變數:
// webpack.config.js

// definePlugin 接收字元串插入到代碼當中, 所以你需要的話可以寫上 JS 的字元串
var definePlugin = new webpack.DefinePlugin({
__DEV__: JSON.stringify(JSON.parse(process.env.BUILD_DEV || 'true')),
__PRERELEASE__: JSON.stringify(JSON.parse(process.env.BUILD_PRERELEASE || 'false'))
});

mole.exports = {
entry: './main.js',
output: {
filename: 'bundle.js'
},
plugins: [definePlugin]
};

然後你在控制台里用 BUILD_DEV=1 BUILD_PRERELEASE=1 webpack 編譯. 注意一下因為 webpack -p 會執行 uglify dead-code elimination, 任何這種代碼都會被剔除, 所以你不用擔心秘密功能泄漏.
7. 多個進入點(entrypoints)
比如你用 profile 頁面跟 feed 頁面. 當用戶訪問 profile, 你不想讓他們下載 feed 頁面的代碼. 因此你創建多個包: 每個頁面一個 "main mole":
// webpack.config.js
mole.exports = {
entry: {
Profile: './profile.js',
Feed: './feed.js'
},
output: {
path: 'build',
filename: '[name].js' // 模版基於上邊 entry 的 key
}
};

針對 profile, 在頁面當中插入 <script src="build/Profile.js"></script>. feed 頁面也是一樣.
8. 優化共用代碼
feed 頁面跟 profile 頁面共用不要代碼(比如 React 還有通用的樣式和 component). Webpack 可以分析出來他們有多少共用模塊, 然後生成一個共享的包用於代碼的緩存.
// webpack.config.js

var webpack = require('webpack');

var commonsPlugin =
new webpack.optimize.CommonsChunkPlugin('common.js');

mole.exports = {
entry: {
Profile: './profile.js',
Feed: './feed.js'
},
output: {
path: 'build',
filename: '[name].js'
},
plugins: [commonsPlugin]
};

在上一個步驟的 script 標簽前面加上 <script src="build/common.js"></script> 你就能得到廉價的緩存了.
9. 非同步載入
CommonJS 是同步的, 但是 Webpack 提供了非同步指定依賴的方案. 這對於客戶端的路由很有用, 你想要在每個頁面都有路由, 但你又不像在真的用到功能之前就下載某個功能的代碼.
聲明你想要非同步載入的那個"分界點". 比如:
if (window.location.pathname === '/feed') {
showLoadingState();
require.ensure([], function() { // 語法奇葩, 但是有用
hideLoadingState();
require('./feed').show(); // 函數調用後, 模塊保證在同步請求下可用
});
} else if (window.location.pathname === '/profile') {
showLoadingState();
require.ensure([], function() {
hideLoadingState();
require('./profile').show();
});
}

Webpack 會完成其餘的工作, 生成額外的 chunk 文件幫你載入好.
Webpack 在 HTML script 標簽中載入他們時會假設這些文件是怎你的根路徑下. 你可以用 output.publicPath 來配置.
// webpack.config.js
output: {
path: "/home/proj/public/assets", // path 指向 Webpack 編譯能的資源位置
publicPath: "/assets/" // 引用你的文件時考慮使用的地址
}

❸ webpack 熱重載的3種方式

開發階段,如果每次文件變更後,都要手動去打包build是很不方便的,通常在開發階段採用以下三種方式進行熱重載(自動編譯)

配置文件提供一個入口和一個出口,webpack根據這個來進行js的打包和編譯工作。package.json文件增加watch腳本 --watch 動態監聽文件的改變並實時打包,輸出新的文件,這樣文件多了之後速度會很慢,而且此打包方式不會熱更新,即每次webpack編譯之後,你還需要手動刷新瀏覽器。
缺點: 需手動刷新瀏覽器
優點: 自動編譯

webpack-dev-server實際上相當於啟用了一個express的Http伺服器+調用了webpack-dev-middleware【簡單的web伺服器和實時重載】。這個Http伺服器和client使用了websocket通訊協議,原始文件做出改動後,webpack-dev-server會用webpack實時的編譯,再用webpack-dev-middleware將webpack編譯後的文件輸出到內存中。【這邊注意,最後的編譯的文件並沒有輸出到目標文件夾,都保存到了內存】(適合純前端項目,很難編寫後端服務,進行整合)

優點: 自動編譯 + 實時重新載入瀏覽器
webpack-dev-server

缺點: 需手動刷新瀏覽器 + 配置文件和插件多
優點: 自動編譯

定義了webpack.config里的entry和output的關系脈絡,webpack-dev-middleware能在此基礎上形成一個文件映射系統,每當應用程序請求一個文件。它匹配到了就把內存中緩存的對應結果以文件格式返回,反之進入下一個中間件。

因為是內存型文件系統,所以重建速度非常快,很適合於開發階段用作靜態資源伺服器;因為webpack可以把任何一種資源當作是模塊來處理,因此能向客戶端反饋各種格式的資源,所以可以替代HTTP伺服器。

三者相比:觀察模式在開發中不實用;web伺服器實用性強;webpack中間件+express使用了2個插件,2個配置文件,配置復雜

事實上,大多數 webpack 用戶用過的 webpack-dev-server 就是一個 express+webpack-dev-middleware 的實現。

二者的區別僅在於 webpack-dev-server 是封裝好的,除了 webpack.config 和命令行參數之外,很難去做定製型開發。而 webpack-dev-middleware 是中間件,可以編寫自己的後端服務然後把它整合進來,相對而言比較靈活自由。

是一個結合webpack-dev-middleware使用的middleware,它可以實現瀏覽器的無刷新更新(hot reload),這也是webpack文檔里常說的HMR(Hot Mole Replacement)。HMR和熱載入的區別是:熱載入是刷新整個頁面。

運行方式:
1、命令行
package.json中指令加上 --hot

2、Nodejs API

熱更新熱重載
webpack-dev-server 自動打包/熱重載

❹ webpack基本使用

step1: 創建一個項目錄
注意:項目名一般 不要帶中文
step2: 創建 package.json

或者:

step4: 處理第三方文件
html文件中需要引入多個js文件或者第三方模塊(例如:jquery.js),只引入項目js入口文件( main.js ),其他js文件均在入口文件中導入。導致可能JS文件中使用了瀏覽器不薯早識別的高級語法:

總結:webpack可以做兩件事情況:

step5: 配置入口文件和出口文件
每次修改js文件,手動輸入命令: webpack 入口文件路徑 -o 出口文件路徑 重新打包, 每次都要輸入入口文件和宏鋒出口文件,麻煩。可以在項目目錄下建立配置文件 webpack.config.js ,指定入口文件和出口文件:

重新打包:

step6: 實現自動打包編譯
每次修改js文件,都要手動重新打包,還是麻煩?使用 webpack-dev-server 這個工具,來實現自動打包編譯的功能。

webpack-dev-server 這個工具,如果想要正常運行,要求在本地項目中必須安裝 webpack

在 package.json 文件中配置命令:

在終端中執行命令:

註:在終端執行 npm run dev ,就等於執行 webpack-dev-server 命令。這將在node中開啟一個伺服器,並且立即打包。每次修改文件,ctrl + s 保存文件,webpack-dev-server工具自動監聽文件改變,並且自動打包。

改變文件引用路徑:
執行上述命令後終端會有類似信息輸出:
【 Project is running at http://localhost:8080/ 】——webpack-dev-server工具將項目託管到localhost:8080/埠上

【webpack output is served from /】——打包好的文件通過localhost:8080/bundle.js訪問

【Content not from webpack is served from C:UsersyfbDesktop前端學習案例4.27wabpackDemo_1src】——不是通過webpack打包的文件,則是以src為根目錄訪問。

該項目根目錄下並不存在bundel.js文件,我們可以認為webpack-dev-server把打包好的文件,以一種虛擬的形式託管到了咱們項目的根目錄中,雖然我們看不到它,但是可以認為和 dist、src、node_moles平級,有一個看不見的文件,叫做 bundle.js。其實是為了頻繁打包,提高效率,直接把打包的文件放在內存中。

因為項目託管到新伺服器,現在應該訪問的是 該伺服器 下的項目,文件引用路徑也要改變:

step7: 自動打開瀏覽器進行訪問、配置埠號、指定託管的根蔽手晌目錄、熱重載(只是修改補丁,不重新生成整個bundle.js文件)
在 package.json 中配置命令,並重啟伺服器:

step8: 使用 html-webpack-plugin 插件
使用 --contentBase 指令的過程比較繁瑣,需要指定啟動的目錄,同時還需要修改index.html中script標簽的src屬性。

安裝 html-webpack-plugin 插件:

在 webpack.config.js 配置文件中配置插件:

html-webpack-plugin 插件的兩個作用:

step9: 處理樣式文件
html文件中需要引入css、less、sass樣式文件。默認情況下,webpack處理不了這些樣式文件。

處理css文件:

處理less樣式文件

熱點內容
上傳圖片命名規則 發布:2024-11-16 06:28:37 瀏覽:556
qq閱讀上傳 發布:2024-11-16 06:27:04 瀏覽:110
鴻蒙系統與安卓區別在哪裡 發布:2024-11-16 06:24:59 瀏覽:123
安卓手機如何更改信息提示音 發布:2024-11-16 06:12:52 瀏覽:142
我的世界伺服器domc 發布:2024-11-16 06:04:54 瀏覽:854
object類型java 發布:2024-11-16 06:04:46 瀏覽:477
騎砍2存儲 發布:2024-11-16 06:04:04 瀏覽:179
nas的監控存儲 發布:2024-11-16 05:52:53 瀏覽:316
phpxml轉換 發布:2024-11-16 05:47:10 瀏覽:955
內網伺服器搭建什麼公司做 發布:2024-11-16 05:36:24 瀏覽:594