溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

Vue中工程模板文件使用webpack打包配置的示例分析

發(fā)布時(shí)間:2021-08-17 10:26:30 來(lái)源:億速云 閱讀:184 作者:小新 欄目:web開(kāi)發(fā)

這篇文章主要介紹Vue中工程模板文件使用webpack打包配置的示例分析,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!

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: {
  //自動(dòng)擴(kuò)展文件后綴名,意味著我們r(jià)equire模塊可以省略不寫(xiě)后綴名
  extensions: ['.js', '.vue'],
  //模塊別名定義,方便后續(xù)直接引用別名,無(wú)須多寫(xiě)長(zhǎng)長(zhǎng)的地址
  alias: {
   'vue': 'vue/dist/vue.esm.js'
  }
 }
};

(2)開(kāi)發(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模塊用于對(duì)系統(tǒng)文件及目錄進(jìn)行讀寫(xiě)操作
const fs = require('fs');
//編譯前用node生成一個(gè)env.js的文件,用來(lái)標(biāo)明當(dāng)前是開(kāi)發(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í)生成一個(gè)sourcemap文件,并在打包文件的末尾添加//# souceURL,注釋會(huì)告訴JS引擎原始文件位置
 devtool: '#source-map',
 output: {
  //線(xiàn)上環(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({
   //提取的公共塊的塊名稱(chēng)(chunk)
   name: 'vendors',
   //生成的通用的文件名
   filename: 'vendors.js'
  }),
  new HtmlWebpackPlugin({
   //輸出文件
   filename: '../index.html',
   //模板文件
   template: './src/template/index.ejs',
   //不插入生成的 js 文件,只是單純的生成一個(gè) html 文件
   inject: false
  })
 ]
});

(3)線(xiàn)上環(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模塊用于對(duì)系統(tǒng)文件及目錄進(jìn)行讀寫(xiě)操作
const fs = require('fs');
//編譯前用node生成一個(gè)env.js的文件,用來(lái)標(biāo)明當(dāng)前是開(kāi)發(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: {
  //線(xiàn)上環(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({
   //提取的公共塊的塊名稱(chēng)(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 文件,只是單純的生成一個(gè) 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插件管理(包括安裝、卸載、管理依賴(lài)等),所以需要先下載安裝nodejs,安裝完成后使用npm -v查看是否安裝完成;

2、安裝cnpm(此步驟為非必須):因?yàn)閚pm安裝插件是從國(guó)外的網(wǎng)站上下載的,由于網(wǎng)絡(luò)影響,很容易就出現(xiàn)異常,cnpm是一個(gè)完整 npmjs.org 鏡像,你可以用此代替官方版本(只讀),同步頻率目前為 10分鐘 一次以保證盡量與官方服務(wù)同步。 使用npm install -g cnpm --registry=https://registry.npm.taobao.org安裝,之后可以使用cnpm來(lái)代替npm;

3、全局安裝vue-cli腳手架,npm install -g vue-cli (不加-g安裝到當(dāng)前目錄;加-g安裝到系統(tǒng)的node目錄),安裝完成后使用vue -V查看;

4、創(chuàng)建一個(gè)基于webpack模板的新項(xiàng)目(下載模板);使用 vue init webpack my-project(項(xiàng)目文件夾名);接下來(lái)進(jìn)行一系列的設(shè)置后,就下載好了一個(gè)vue模板了;

5、cd my-project 進(jìn)入項(xiàng)目文件夾;使用npm install命令安裝package.json文件里的依賴(lài),會(huì)根據(jù)前端項(xiàng)目的依賴(lài)關(guān)系下載好相關(guān)的組件,存在項(xiàng)目目錄的node_modules文件夾下;

6、安裝node_modules依賴(lài)后,使用命令 npm run dev 啟動(dòng)項(xiàng)目(dev配置在package.json文件中)。

以上是“Vue中工程模板文件使用webpack打包配置的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI