這篇文章主要介紹Vue中工程模板文件使用webpack打包配置的示例分析,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!
創(chuàng)新互聯(lián)建站是專業(yè)的東蘭網(wǎng)站建設(shè)公司,東蘭接單;提供網(wǎng)站設(shè)計(jì)制作、成都網(wǎng)站設(shè)計(jì),網(wǎng)頁設(shè)計(jì),網(wǎng)站設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行東蘭網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來合作!1、github
github地址:https://github.com/MengFangui/VueProjectTemplate
2、webpack配置
(1)基礎(chǔ)配置webpack.base.config.js
const path = require('path'); //處理共用、通用的js const webpack = require('webpack'); //css單獨(dú)打包 const ExtractTextPlugin = require('extract-text-webpack-plugin'); module.exports = { //入口文件 entry: { main: './src/main', vendors: './src/vendors' }, output: { path: path.join(__dirname, './dist') }, module: { rules: [ //vue單文件處理 { test: /\.vue$/, use: [{ loader: 'vue-loader', options: { loaders: { less: ExtractTextPlugin.extract({ //minimize 啟用壓縮 use: ['css-loader?minimize', 'autoprefixer-loader', 'less-loader'], fallback: 'vue-style-loader' }), css: ExtractTextPlugin.extract({ use: ['css-loader', 'autoprefixer-loader', 'less-loader'], fallback: 'vue-style-loader' }) } } }] }, //iview文件夾下的js編譯處理 { test: /iview\/.*?js$/, loader: 'babel-loader' }, //js編譯處理 { test: /\.js$/, loader: 'babel-loader', exclude: /node_modules/ }, //css處理 { test: /\.css$/, use: ExtractTextPlugin.extract({ //minimize 啟用壓縮 use: ['css-loader?minimize', 'autoprefixer-loader'], fallback: 'style-loader' }) }, //less處理 { test: /\.less/, use: ExtractTextPlugin.extract({ use: ['css-loader?minimize', 'autoprefixer-loader', 'less-loader'], fallback: 'style-loader' }) }, //圖片處理 { test: /\.(gif|jpg|png|woff|svg|eot|ttf)\??.*$/, loader: 'url-loader?limit=1024' }, //實(shí)現(xiàn)資源復(fù)用 { test: /\.(html|tpl)$/, loader: 'html-loader' } ] }, resolve: { //自動擴(kuò)展文件后綴名,意味著我們r(jià)equire模塊可以省略不寫后綴名 extensions: ['.js', '.vue'], //模塊別名定義,方便后續(xù)直接引用別名,無須多寫長長的地址 alias: { 'vue': 'vue/dist/vue.esm.js' } } };
(2)開發(fā)環(huán)境配置webpack.dev.config.js
//處理共用、通用的js const webpack = require('webpack'); //處理html模板 const HtmlWebpackPlugin = require('html-webpack-plugin'); //css單獨(dú)打包 const ExtractTextPlugin = require('extract-text-webpack-plugin'); //合并配置 const merge = require('webpack-merge'); const webpackBaseConfig = require('./webpack.base.config.js'); //fs模塊用于對系統(tǒng)文件及目錄進(jìn)行讀寫操作 const fs = require('fs'); //編譯前用node生成一個env.js的文件,用來標(biāo)明當(dāng)前是開發(fā)(development)還是生產(chǎn)環(huán)境(production) fs.open('./src/config/env.js', 'w', function(err, fd) { const buf = 'export default "development";'; fs.write(fd, buf, 0, buf.length, 0, function(err, written, buffer) {}); }); module.exports = merge(webpackBaseConfig, { //打包代碼的同時(shí)生成一個sourcemap文件,并在打包文件的末尾添加//# souceURL,注釋會告訴JS引擎原始文件位置 devtool: '#source-map', output: { //線上環(huán)境路徑 publicPath: '/dist/', filename: '[name].js', chunkFilename: '[name].chunk.js' }, plugins: [ //css單獨(dú)打包 new ExtractTextPlugin({ filename: '[name].css', allChunks: true }), //通用模塊編譯 new webpack.optimize.CommonsChunkPlugin({ //提取的公共塊的塊名稱(chunk) name: 'vendors', //生成的通用的文件名 filename: 'vendors.js' }), new HtmlWebpackPlugin({ //輸出文件 filename: '../index.html', //模板文件 template: './src/template/index.ejs', //不插入生成的 js 文件,只是單純的生成一個 html 文件 inject: false }) ] });
(3)線上環(huán)境配置webpack.prod.config.js
//處理共用、通用的js const webpack = require('webpack'); //處理html模板 const HtmlWebpackPlugin = require('html-webpack-plugin'); //css單獨(dú)打包 const ExtractTextPlugin = require('extract-text-webpack-plugin'); //合并配置 const merge = require('webpack-merge'); const webpackBaseConfig = require('./webpack.base.config.js'); //fs模塊用于對系統(tǒng)文件及目錄進(jìn)行讀寫操作 const fs = require('fs'); //編譯前用node生成一個env.js的文件,用來標(biāo)明當(dāng)前是開發(fā)(development)還是生產(chǎn)環(huán)境(production) fs.open('./src/config/env.js', 'w', function (err, fd) { const buf = 'export default "production";'; fs.write(fd, buf, 0, buf.length, 0, function (err, written, buffer){}); }); module.exports = merge(webpackBaseConfig, { output: { //線上環(huán)境路徑 publicPath: 'dist/', filename: '[name].[hash].js', chunkFilename: '[name].[hash].chunk.js' }, plugins: [ new ExtractTextPlugin({ //css單獨(dú)打包 filename: '[name].[hash].css', allChunks: true }), //通用模塊編譯 new webpack.optimize.CommonsChunkPlugin({ //提取的公共塊的塊名稱(chunk) name: 'vendors', //生成的通用的文件名 filename: 'vendors.[hash].js' }), new webpack.DefinePlugin({ 'process.env': { NODE_ENV: '"production"' } }), //js壓縮 new webpack.optimize.UglifyJsPlugin({ compress: { warnings: false } }), new HtmlWebpackPlugin({ //輸出文件 filename: '../index_prod.html', //模板文件 template: './src/template/index.ejs', //不插入生成的 js 文件,只是單純的生成一個 html 文件 inject: false }) ] });
(4)package.json文件
{ "name": "iview-project", "version": "2.1.0", "description": "A base project with Vue.js2、Vue-Router、webpack2 and with iView2.", "main": "index.js", "scripts": { "init": "webpack --progress --config webpack.dev.config.js", "dev": "webpack-dev-server --content-base ./ --open --inline --hot --compress --history-api-fallback --config webpack.dev.config.js", "build": "webpack --progress --hide-modules --config webpack.prod.config.js" }, "repository": { "type": "git", "url": "git+https://github.com/iview/iview-project.git" }, "author": "Aresn", "license": "MIT", "dependencies": { "vue": "^2.2.6", "vue-router": "^2.2.1", "iview": "^2.0.0-rc.8" }, "devDependencies": { "autoprefixer-loader": "^2.0.0", "babel": "^6.23.0", "babel-core": "^6.23.1", "babel-loader": "^6.2.4", "babel-plugin-transform-runtime": "^6.12.0", "babel-preset-es2015": "^6.9.0", "babel-runtime": "^6.11.6", "css-loader": "^0.23.1", "extract-text-webpack-plugin": "^2.0.0", "file-loader": "^0.8.5", "html-loader": "^0.3.0", "html-webpack-plugin": "^2.28.0", "less": "^2.7.1", "less-loader": "^2.2.3", "style-loader": "^0.13.1", "url-loader": "^0.5.7", "vue-hot-reload-api": "^1.3.3", "vue-html-loader": "^1.2.3", "vue-loader": "^11.0.0", "vue-style-loader": "^1.0.0", "vue-template-compiler": "^2.2.1", "webpack": "^2.2.1", "webpack-dev-server": "^2.4.1", "webpack-merge": "^3.0.0" }, "bugs": { "url": "https://github.com/iview/iview-project/issues" }, "homepage": "https://www.iviewui.com" }
ps:下面看下如何使用webpack打包vue項(xiàng)目?
1、安裝nodejs:使用webpack打包需要用到npm,npm(node package manager)是nodejs的包管理器,用于node插件管理(包括安裝、卸載、管理依賴等),所以需要先下載安裝nodejs,安裝完成后使用npm -v查看是否安裝完成;
2、安裝cnpm(此步驟為非必須):因?yàn)閚pm安裝插件是從國外的網(wǎng)站上下載的,由于網(wǎng)絡(luò)影響,很容易就出現(xiàn)異常,cnpm是一個完整 npmjs.org 鏡像,你可以用此代替官方版本(只讀),同步頻率目前為 10分鐘 一次以保證盡量與官方服務(wù)同步。 使用npm install -g cnpm --registry=https://registry.npm.taobao.org安裝,之后可以使用cnpm來代替npm;
3、全局安裝vue-cli腳手架,npm install -g vue-cli (不加-g安裝到當(dāng)前目錄;加-g安裝到系統(tǒng)的node目錄),安裝完成后使用vue -V查看;
4、創(chuàng)建一個基于webpack模板的新項(xiàng)目(下載模板);使用 vue init webpack my-project(項(xiàng)目文件夾名);接下來進(jìn)行一系列的設(shè)置后,就下載好了一個vue模板了;
5、cd my-project 進(jìn)入項(xiàng)目文件夾;使用npm install命令安裝package.json文件里的依賴,會根據(jù)前端項(xiàng)目的依賴關(guān)系下載好相關(guān)的組件,存在項(xiàng)目目錄的node_modules文件夾下;
6、安裝node_modules依賴后,使用命令 npm run dev 啟動項(xiàng)目(dev配置在package.json文件中)。
以上是“Vue中工程模板文件使用webpack打包配置的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)成都網(wǎng)站設(shè)計(jì)公司行業(yè)資訊頻道!
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。