webpack快速構建專案

post200發表於2021-09-09

1.前(fei)言(hua)

webpack是什麼我在這裡就不多說了,實在不知道的可以直接在去搜一下,都一大堆答案。關於用webpack怎麼構建專案,方法也是多種多樣,五花八門。今天,我就寫下我平常構建專案的方式,這個方式我覺得比較便捷和簡單粗暴,如果有什麼要指出的,也歡迎大家評論,畢竟我也只是一個前端新人。

2.步驟

第一步,在目錄建個資料夾

圖片描述

為了方便,我在編輯器開啟這個目錄了

第二步,建立package.json配置檔案

輸入命令列  $  npm init
依次輸入,

圖片描述

從上往下就是,專案名稱,迭代版本,專案說明,主入口檔案,封裝的可執行命令,作者的一些資訊,源協議名稱。
這應該就是最簡單的配置檔案了。

第三步,安裝webpack依賴

如果之前沒全域性安裝過webpack,就先安裝一下

$ npm install webpack -g

然後安裝專案依賴

$ npm install webpack --save-dev

然後就會看到package.json裡面多了一行

圖片描述
這就說明安裝成功了。

第四步,建立並配置webpack.config.js

建立webpack.config.js之前,先建立一個index.js和index.html,一個為入口檔案,一個為普通的html檔案
完了之後,目錄就應該是這樣的

圖片描述

在index.js裡面寫上這行測試用途的程式碼

document.write("hello world");

之後,建立一個webpack.config.js,程式碼如下

let path = require('path');
let webpack = require('webpack');
module.exports = {
    entry: './index.js',
    output: {
        path: path.join(__dirname, 'dist'), //輸出目錄的配置,模板、樣式、指令碼、圖片等資源的路徑配置都相對於它
        filename: "bundle.js"
    },
    module: {
        rules: [

        ]
    }
};

這個也應該是最基礎的webpack.config.js了
然後執行 $ webpack
這個命令就是打包輸出,執行完了之後,會看到,資料夾上多了一個dist資料夾,裡面有個bundle.js,這個就是打包輸出之後的資料夾和檔案。需要的就是這些。

第五步,測試結果

在index.html引入之前輸出的bundle.js。

圖片描述
最後,在隨便一個瀏覽器,開啟index.html

圖片描述

大功告成!上面這裡寫了很多,但實際上操作起來就是分分鐘的事情,當然這是最簡單的從零開始。

3.簡單粗暴的搭建

如果真要最簡單的構建專案,更簡單的方法是,直接從別的專案複製package.json這個配置檔案,然後執行

$ npm install

完了之後,在裡面應該有配置的的,就都安裝完成了,附上一段我常用的配置
package.json

{
  "name": "test3",
  "version": "1.0.0",
  "description": "測試版",
  "dependencies": {},
  "devDependencies": {
    "babel-cli": "^6.10.1",
    "babel-core": "^6.14.0",
    "babel-loader": "^6.2.5",
    "babel-preset-es2015": "^6.9.0",
    "babel-preset-stage-0": "^6.5.0",
    "babel-register": "^6.18.0",
    "browser-sync": "^2.18.2",
    "css-loader": "^0.25.0",
    "ejs-compiled-loader": "^2.1.1",
    "element-ui": "^1.2.5",
    "extract-text-webpack-plugin": "^1.0.1",
    "file-loader": "^0.9.0",
    "glob": "^7.0.6",
    "gulp": "^3.9.1",
    "gulp-file-include": "^1.0.0",
    "html-loader": "^0.4.3",
    "html-webpack-plugin": "^2.22.0",
    "iview": "^2.0.0-rc.5",
    "node-sass": "^3.7.0",
    "raw-loader": "^0.5.1",
    "sass-loader": "^4.0.2",
    "scss-loader": "0.0.1",
    "style-loader": "^0.13.1",
    "url-loader": "^0.5.7",
    "vue": "^2.2.6",
    "vue-loader": "^10.0.2",
    "vue-resource": "^1.0.3",
    "vue-router": "^2.4.0",
    "vue-style-loader": "^1.0.0",
    "vue-template-compiler": "^2.2.1",
    "vuex": "^2.0.0",
    "webpack": "^1.13.2",
    "webpack-dev-server": "^1.15.1"
  },
  "scripts": {
    "test": "echo "Error: no test specified" && exit 1",
    "dev": "webpack-dev-server --hot --inline"
  },
  "author": "chen"
}

webpack.config.js

let path = require('path');
let webpack = require('webpack');
let serverHost = "localhost";
let HtmlWebpackPlugin = require('html-webpack-plugin');
module.exports = {
    entry: './src/index.js',
    output: {
        path: path.join(__dirname, 'dist'), //輸出目錄的配置,模板、樣式、指令碼、圖片等資源的路徑配置都相對於它
        publicPath: '/dist/',
        filename: "bundle.js"
    },
    //載入器
    module: {
        loaders: [
            {
                test: /.vue$/,
                loader: "vue-loader"
            },
            {
                test: /.html$/,
                loader: "raw-loader"
            },
            {
                test: /.css$/,
                loader: 'style-loader!css-loader'
            },
            {
                test: /.js$/,
                exclude: /node_modules/,
                loader: "babel-loader"
            },
            {
                test: /.scss$/,
                loader: 'style-loader!css-loader!sass-loader'
            },
            {
                test: /.(eot|svg|ttf|woff|woff2)(?S*)?$/,
                loader: 'file-loader'
            },
            {
                //圖片載入器,雷同file-loader,更適合圖片,可以將較小的圖片轉成base64,減少http請求
                //如下配置,將小於8192byte的圖片轉成base64碼
                test: /.(png|jpg|gif)$/,
                loader: 'url-loader?limit=8192&name=images/[hash].[ext]'
            }
        ]
    },
    vue: {
        loaders: {
            scss: ['vue-style-loader', 'css', 'sass'].join('!')
        }
    },
    plugins: [
        new HtmlWebpackPlugin({
            title:"test3",
            filename:"./dist/index.html",//輸出html檔案,打包時插入js,不用自己手動引入
            inject: 'body',  //js插入的位置,true/'head'/'body'/false
            hash: true
        }),
    ],
    //使用webpack-dev-server
    devServer: {
        contentBase: './',
        host: serverHost,
        port: 9090, //預設9090
        inline: true, //可以監控js變化
        hot: true//熱啟動
    },
    //使用vue2.x的一個配置
    resolve: {
        alias: {vue: 'vue/dist/vue.js'}
    }
};

大家執行$ webpack就知道大概的區別了。在執行dist裡面的index.html,就知道區別了


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/2249/viewspace-2806642/,如需轉載,請註明出處,否則將追究法律責任。

相關文章