typescript ts 基础知识之用webpack打包ts代码

  • Post author:
  • Post category:其他


一、基本配置:

1. 新建文件夹 webpack_js,在文件夹下建文件夹src,src下建文件index.ts

2. 在终端打开文件夹,运行命令行,初始化package.json包管理工具

npm init -y

3. 安装依赖

cnpm i -D  webpack webpack-cli typescript ts-loader

4. 根目录下新建webpack.config.js文件

//引入一个包
const path = require('path')

//webpack中的所有配置信息
module.exports = {
  //运行模式,development开发环境 or production生产环境,此处先设为none
  mode: 'none',
  //值定入口文件
  entry: "./src/index.ts",

  //指定打包文件所在目录
  output: {
    path: path.resolve(__dirname, 'dist'), //指定打包文件的目录
    filename: "bundle.js", //打包后文件的文件名
  },

  // 指定webpack打包时要使用模块
  module: {
    //指定要加载的规则
    rules: [
      {
        test: /\.ts$/, //指定规则生效的文件
        use: 'ts-loader', //要使用的loader
        exclude: /node-modules/, //要排除的文件
      }
    ]
  }
}

5. 根目录下新建tsconfig.json文件

{
  "compilerOptions": {
    "module": "ES2015",
    "target": "ES2015",
    "strict": true
  }
}

6. 在package.json文件的scripts选项中添加命令

"scripts": {
  .....
  "build": "webpack"
},

7. 终端执行命令

npm run build

如果出现budle.js,则打包成功

二、配置扩展

(一). 自动创建html文件,并将打包后代码引入

1. 安装依赖

cnpm i -D html-webpack-plugin

2. 修改webpack.config.js文件配置

//引入html插件
const HTMLWebpackPlugin = require('html-webpack-plugin')

//webpack中的所有配置信息
module.exports = {
  ...
  //配置webpack插件
  plugins: [
    new HTMLWebpackPlugin(),
  ]
}

3. 运行

npm run build

命令,打包文件,出现index.html即为成功,若没出来,删掉dist文件夹重新输入打包命令试试

注意:

a. 简单自定义新建html的标题属性

plugins: [

new HTMLWebpackPlugin({

title: ‘自定义title’

}),

]

b. 按模板结构新建html

plugins: [

new HTMLWebpackPlugin({

template: ‘./src/index.html’, //模板地址,‘./index.html’

}),

]

(二). 打包后,自动在浏览器中预览,修改后自动刷新

1. 安装依赖

cnpm i -D webpack-dev-server

2. 在package.json文件的scripts选项中添加命令

"scripts": {
  ...
  "start": "webpack server --open"
},

3. 执行命令运行,打包后浏览器会自动打开,修改后,会自动重新编译并在浏览器刷新

npm start

(三).  每次打包编译前自动清空dist文件夹,打包后重新生成文件

1. 安装依赖

cnpm i -D clean-webpack-plugin

2.  修改webpack.config.js文件配置

//引入clean插件
const { CleanWebpackPlugin } = require('clean-webpack-plugin')

//webpack中的所有配置信息
module.exports = {
  ...
  //配置webpack插件
  plugins: [
    new CleanWebpackPlugin(),
    ...
  ]
}

3. 下次执行npm run build时会先将dist文件夹清空

(四). 在模块化编程项目中,设置引入文件默认扩展名

1. 修改webpack.config.js文件配置

//webpack中的所有配置信息
module.exports = {
  ...
  //用来设置引用模块
  resolve: {
    extensions: ['.ts', '.js'], //扩展名
  }
}

(五). 解决代码兼容性问题

1. 安装依赖

cnpm i -D @babel/core @babel/preset-env babel-loader core-js

2. 修改webpack.config.js文件配置

module.exports = {
  ...
  // 指定webpack打包时要使用模块
  module: {
    //指定要加载的规则
    rules: [
      {
        test: /\.ts$/, //指定规则生效的文件
        //要使用的loader,倒序执行
        use: [
          //配置babel
          {
            loader: 'babel-loader', //指定加载器
            //设置babel
            options: {
              //设置预定义环境
              presets: [
                [
                  //指定环境的插件
                  "@babel/preset-env",
                  //配置信息
                  {
                    //要兼容的目标浏览器
                    targets: {
                      "chrome":"58", //兼容到chrome58
                      "ie": "11",
                    },
                    "corejs": "3", //指定corejs版本,package.json中可以查看
                    "useBuiltIns": "usage", //指定corejs的方式,usage按需加载
                  }
                ]
              ]
            }
          },
          'ts-loader'
        ], 
        exclude: /node-modules/, //要排除的文件
      }
    ]
  },
}

注意:

webpack打包时自动生成一个箭头函数包裹编译后的代码,在ie中执行会报错,解决方式为修改webpack.config.js文件配置:

//webpack中的所有配置信息
module.exports = {
  ...
  output: {
    ...
    //告诉webpack不使用箭头函数
    environment: {
      arrowFunction: false,
    }
  },
}

附录:

1. package.json

{
  "name": "webpack_js",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "build": "webpack",
    "start": "webpack server --open"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "@babel/core": "^7.18.9",
    "@babel/preset-env": "^7.18.9",
    "babel-loader": "^8.2.5",
    "clean-webpack-plugin": "^4.0.0",
    "core-js": "^3.23.5",
    "html-webpack-plugin": "^5.5.0",
    "ts-loader": "^9.3.1",
    "typescript": "^4.7.4",
    "webpack": "^5.73.0",
    "webpack-cli": "^4.10.0",
    "webpack-dev-server": "^4.9.3"
  }
}

2. webpack.config.js

//引入一个包
const path = require('path')
//引入html插件
const HTMLWebpackPlugin = require('html-webpack-plugin')
//引入clean插件
const { CleanWebpackPlugin } = require('clean-webpack-plugin')
 
//webpack中的所有配置信息
module.exports = {
  //运行模式,development开发环境 or production生产环境,此处先设为none
  mode: 'none',
  //值定入口文件
  entry: "./src/index.ts",
  //指定打包文件所在目录
  output: {
    path: path.resolve(__dirname, 'dist'), //指定打包文件的目录
    filename: "bundle.js", //打包后文件的文件名
    //告诉webpack不使用箭头函数
    environment: {
      arrowFunction: false,
    }
  },
 
  // 指定webpack打包时要使用模块
  module: {
    //指定要加载的规则
    rules: [
      {
        test: /\.ts$/, //指定规则生效的文件
        //要使用的loader,倒序执行
        use: [
          //配置babel
          {
            loader: 'babel-loader', //指定加载器
            //设置babel
            options: {
              //设置预定义环境
              presets: [
                [
                  //指定环境的插件
                  "@babel/preset-env",
                  //配置信息
                  {
                    //要兼容的目标浏览器
                    targets: {
                      "chrome":"58", //兼容到chrome58
                      "ie": "11",
                    },
                    "corejs": "3", //指定corejs版本,package.json中可以查看
                    "useBuiltIns": "usage", //指定corejs的方式,usage按需加载
                  }
                ]
              ]
            }
          },
          'ts-loader'
        ], 
        exclude: /node-modules/, //要排除的文件
      }
    ]
  },
 
  //配置webpack插件
  plugins: [
    new HTMLWebpackPlugin(),
    // new HTMLWebpackPlugin({
      // title: '自定义title'
      // template: './src/index.html'
    // }),
    new CleanWebpackPlugin()
  ],
 
  //用来设置引用模块
  resolve: {
    extensions: ['.ts', '.js'], //扩展名
  }
}



版权声明:本文为weixin_59128282原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。