webpack + ts 項目的初始化


2019-12-17   第一次更新----------------------------------------------------------

1.大的環境配置,git  node  webpack 等等的一些插件全局安裝,一般國內使用npm下載(服務器架設在國外)會有一些網絡問題,可以使用淘寶鏡像代理,但是不建議這么做,因為淘寶鏡像下載依賴經常出現各種各樣的奇葩問題,總之可以用npm的話就不用cnpm(淘寶鏡像)。這些東西下載的話可以自行百度(一大堆),這里就不詳述了。

2.進入項目目錄文件夾,一般來說這時候是一個空的文件夾。

運行  npm init -y  或者  npm init        前者更省事兒一點。

 3.運行 npm install -D webpack  在項目目錄下安裝webpack,同時高版本的webpack還需要 安裝webpack-cli,安裝方法與前面類似。

 4.在項目根目錄文件夾下創建一個webpack.config.js文件(這里給出一份基礎的配置內容):

module.exports = {

    mode: 'development',

    //入口

    entry: __dirname + '/src/index.ts',

    //出口

    output: {

        path: __dirname + '/dist',

        filename: 'bundle.js',

    },

    module: {

        rules: [

            {

                test: /\.tsx?$/,

                use: {

                    loader: 'ts-loader'

                }

            },

        ]

    },

    resolve: {

        extensions: [".ts", ".js"],

        alias: {

            "@": __dirname + "/src",

            // "@component": __dirname + "src/component",

            // "@pages": __dirname + "src/pages",

            // "@utils": __dirname + "src/utils",

        },

    }

}





5.在上述配置文件中可以看到我們使用了TS(typescript)依賴,首先需要下載依賴:

  npm install -D typescript ts-loader 其次,再在webpack.config.js中做出配置(這里我直接先展示了配置好的文件)。

 

6.接下來需要在項目根目錄文件夾中創建tsconfig.json文件,這里同樣提供一份基礎的ts打包配置文件:

{

    "compilerOptions": {

        "baseUrl": ".",

        "paths": {

            "@/*": ["src/*"]

        },

        "module": "commonjs",

        "target": "es5",

        "sourceMap": true,

        "allowSyntheticDefaultImports": true,

        "esModuleInterop": true,

        "allowJs": true,

    },

    "include": [

        "src/ts/*",

        "src/*"

    ],

    "exclude": [

        "node_modules",

        "dist"

    ]

}

 

7.至此,包含一個入口一個出口,可以使用ts編程的基礎框架就做好了,如果需要打包htmlcss文件,需要下載和配置額外的依賴。附一張目前為止的項目文件目錄結構:

 

附:有關webpack打包的快捷命令設置(在package.json文件中):

"scripts": {

    "test": "echo \"Error: no test specified\" && exit 1",

    "dev": "webpack --mode development",

    "build": "webpack --mode production"

  }

 

配置完成后,可以使用npm run dev 以及 npm run build 做開發環境/生產環境的打包設置。

(手懶 + 技術菜 + 隨便寫寫,隨緣更新了。)

2020-03-31   第二次更新----------------------------------------------------------

 

8.webpack熱更新:

 

 npm install babel-preset-es2015 --save-dev

 

安裝babel並在項目根目錄創建.babelrc文件,初始配置:{"presets": ["es2015"]}

安裝webpack-dev-servernpm install webpack-dev-server --save-dev

package.json中修改script部分的腳本如下:

"scripts": {

 

    "test": "echo \"Error: no test specified\" && exit 1",

 

    "dev": "webpack --mode development && webpack-dev-server --progress --colors",

 

    "build": "webpack --mode production"

 

  }

 

如上代碼,在運行dev時加了webpack-dev-server --progress --colors

的熱更新相關命令。此時再改變src中的工程代碼,npm就會執行自動打包。(綁定一個小型的express服務器到localhost:8090,來為你的靜態資源及bunble(自動編譯)服務。但是到目前為止,index.html還是個本地文件,怎么生成一個服務器上的Index.html文件呢?

1)安裝html-webpack-plugin

npm install html-webpack-plugin --save-dev

2)配置html-webpack-plugin

修改webpack.config.js為如下:

const webpack = require("webpack");
const HtmlWebpackPlugin = require("html-webpack-plugin");
module.exports = {
    mode: 'development',
    //入口
    entry: __dirname + '/src/index.ts',
    //出口
    output: {
        path: __dirname + '/dist',
        filename: 'bundle.js',
    },
    module: {

        rules: [

            {
                test: /\.tsx?$/,

                use: {

                    loader: 'ts-loader'

                }
            },
        ]
    },

    resolve: {

        extensions: [".ts", ".js"],

        alias: {

            "@": __dirname + "/src",

            // "@component": __dirname + "src/component",

            "@pages": __dirname + "/src/pages",

            // "@utils": __dirname + "src/utils",

        },
    },
    devServer: {
        inline: true,
        port: 8080,
    },

    plugins: [

        new HtmlWebpackPlugin({

            template: './index.html'

        }),

        new webpack.HotModuleReplacementPlugin()
    ]

}

主要是增加了plugins配置以及該配置相關的依賴引入。

 

 9.引入react相關依賴

(現如今做前端,最基礎的就是三大框架得會一個了吧,不然面試的時候可咋說~那么在webpack項目中如何使用react框架進行項目編寫呢?)

1)第一步當然是下載相關的依賴包了:

npm install --save react react-dom

2)接下來就是修改各種配置了:

tsconfig.json配置開始,首先需要在tsx文件里頭支持jsx,然后需要配置編譯過程中需要引入的庫文件的列表(老實說,不太明白這個配置的意義,但是不配它就報錯呀~),同時在原來的基礎上優化了編譯的包含目錄(只是寫法改變,包含不變)。上代碼(這次我對一些改變的配置做了注釋,寫代碼打注釋是個好習慣):

{
    "compilerOptions": {
        "baseUrl": ".",
        "paths": {
            "@/*": ["src/*"],
            "@pages/*": ["src/pages/*"]
        },
        "module": "commonjs",
        "target": "es5",
        "jsx": "react",    //在tsx文件里支持jsx
        "sourceMap": true,
        "allowSyntheticDefaultImports": true,
        "esModuleInterop": true,
        "allowJs": true,
        "lib": ["es2015", "dom", "es2015.promise"], //編譯過程中需要引入的庫文件的列表
    },
    "include": [
        "src/**/*"           //編譯包含在  src及其子目錄下的所有匹配的文件
    ],

    "exclude": [

        "node_modules",

        "dist"

    ]

}

再接下來是webpack.config.js文件配置的修改:首先修改入口為index.tsx,同樣的文件名稱也要從index.ts變成index.tsx,這么做是因為react就是jsx語法嘛~;之后,resolve里頭的extensions配置數組也需要添加.tsx文件類型。這樣基本就ok了。上代碼(老實說,每次改一丟丟都把完整的配置貼出來,這在編程里叫什么,冗余~但是便於閱讀理解,沒有想到更好的辦法之前就這樣了):

const webpack = require("webpack");
const HtmlWebpackPlugin = require("html-webpack-plugin");
// const Merge = require("webpack-merge");
module.exports = {
    mode: 'development',
    //入口
    entry: __dirname + '/src/index.tsx',
    //出口
    output: {
        path: __dirname + '/dist',
        filename: 'bundle.js',
    },
    module: {
        rules: [
            {
                test: /\.tsx?$/,
                use: {
                    loader: 'ts-loader'
                }
            },
        ]
    },
    resolve: {
        extensions: [".ts", ".tsx", ".js"],    //添加支持的文件類型
        alias: {
            "@": __dirname + "/src",
            // "@component": __dirname + "src/component",
            "@pages": __dirname + "/src/pages",
            // "@utils": __dirname + "src/utils",

        },
    },
    devServer: {
        inline: true,
        port: 8080,
    },
    plugins: [
        new HtmlWebpackPlugin({
            template: './index.html'

        }),
        new webpack.HotModuleReplacementPlugin()
    ]
}

好的,這樣我們就可以在項目中愉快的使用ts+react來編寫了。

(結尾預告一下之后的方向,排名不分先后:多頁面webpack配置 + 開發/生產環境webpack配置 + css相關依賴引入配置)。

10.引入less相關依賴

npm install --save-dev css-loader less-loader less style-loader

 

webpack.config.js中增加如下模塊配置:

module: {
        rules: [
            ...

            { 
                test:/\.less$/,
                use: ['style-loader','css-loader','less-loader']
            },
            { 
                test:/\.css$/,
                use: ['style-loader','css-loader']
            },
        ]

}

 

———————————————— 完結(預告一下,下篇隨筆有個關於此篇隨筆的后續)——————————————

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM