添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

wk.config.js

const path = require('path');
const { CleanWebpackPlugin } = require('clean-webpack-plugin');
const HtmlWebpackPlugin = require('html-webpack-plugin');
module.exports = {
  mode: "development",
  entry: "./src/react_index.jsx",
  devtool: "source-map",
  output: {
    filename: "js/bundle.js",
    // 必须是一个绝对路径
    path: path.resolve(__dirname, "./build"),
    // assetModuleFilename: "img/[name].[hash:6][ext]"
  module: {
    rules: [
        test: /\.jsx?$/,
        exclude: /node_modules/, // 排除node_modules文件夹
        use: {
          loader: "babel-loader",
          // options: {
          //   // 使用预设,就不是plugins,而是presets
          //   presets: [
          //     ["@babel/preset-env", {
          //       // 不推荐在这里写,推荐在.browserslistrc中统一配置
          //       // targets: ["chrome 88"] 
          //       // enmodules: true
          //     }]
          //   ]
          //   // 使用指定插件,就是plugins
          //   // plugins: [
          //   //   "@babel/plugin-transform-arrow-functions",
          //   //   "@babel/plugin-transform-block-scoping"
          //   // ]
  plugins: [
    new CleanWebpackPlugin(),
    new HtmlWebpackPlugin({
      title: "哈哈哈 webpack",
      template: "./index.html"

babel.config.js

module.exports = {
  presets: [
    ["@babel/preset-env", {
      // useBuiltIns:哪些东西需要构建
      // false: 不用任何的polyfill相关的代码
      // usage: 代码中需要哪些polyfill, 就引用相关的api
      // entry: 手动在入口文件中导入 core-js/regenerator-runtime, 根据目标浏览器引入所有对应的polyfill
      useBuiltIns: "entry",
      corejs: 3 // 【默认用版本2,这里安装的是3版本,不指定就报错。】
    ["@babel/preset-react"]
  // 【了解】
  // plugins: [
  //   ["@babel/plugin-transform-runtime", {
  //     corejs: 3
  //   }]

index.js

import "core-js/stable";
import "regenerator-runtime/runtime";
const message = "Hello World";
const foo = (info) => {
  console.log(info)
foo(message);
const p = new Promise((resolve, reject) => {})

TypeScript的编译

【tsc --init:这一步必须做,否则报错。】
【npx tsc:是手动执行编译ts。】
  "build": "webpack --config wk.config.js",
  "type-check": "tsc --noEmit",
  "type-check-watch": "tsc --noEmit --watch"

wk.config.js

const path = require('path');
const { CleanWebpackPlugin } = require('clean-webpack-plugin');
const HtmlWebpackPlugin = require('html-webpack-plugin');
module.exports = {
  mode: "development",
  entry: "./src/index.ts",
  devtool: "source-map",
  output: {
    filename: "js/bundle.js",
    // 必须是一个绝对路径
    path: path.resolve(__dirname, "./build"),
    // assetModuleFilename: "img/[name].[hash:6][ext]"
  module: {
    rules: [
        test: /\.jsx?$/,
        exclude: /node_modules/,
        use: {
          loader: "babel-loader",
          // options: {
          //   presets: [
          //     ["@babel/preset-env", {
          //       // targets: ["chrome 88"]
          //       // enmodules: true
          //     }]
          //   ]
          //   // plugins: [
          //   //   "@babel/plugin-transform-arrow-functions",
          //   //   "@babel/plugin-transform-block-scoping"
          //   // ]
        test: /\.ts$/,
        exclude: /node_modules/,
        // 本质上是依赖于typescript(typescript compiler)
        use: "babel-loader"
  plugins: [
    new CleanWebpackPlugin(),
    new HtmlWebpackPlugin({
      title: "coderwhy webpack",
      template: "./index.html"

babel.config.js

module.exports = {
  presets: [
    ["@babel/preset-env", {
      // false: 不用任何的polyfill相关的代码
      // usage: 代码中需要哪些polyfill, 就引用相关的api
      // entry: 手动在入口文件中导入 core-js/regenerator-runtime, 根据目标浏览器引入所有对应的polyfill
      useBuiltIns: "usage",
      corejs: 3
    ["@babel/preset-react"],
    ["@babel/preset-typescript"]
  // plugins: [
  //   ["@babel/plugin-transform-runtime", {
  //     corejs: 3
  //   }]

package.json

"name": "01_learn_webpack", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "build": "webpack --config wk.config.js", "type-check": "tsc --noEmit", "type-check-watch": "tsc --noEmit --watch" "author": "", "license": "ISC", "devDependencies": { "@babel/cli": "^7.12.10", "@babel/core": "^7.12.10", "@babel/plugin-transform-arrow-functions": "^7.12.1", "@babel/plugin-transform-block-scoping": "^7.12.12", "@babel/plugin-transform-runtime": "^7.12.10", "@babel/preset-env": "^7.12.11", "@babel/preset-react": "^7.12.10", "@babel/preset-typescript": "^7.12.13", "autoprefixer": "^10.2.3", "babel-loader": "^8.2.2", "clean-webpack-plugin": "^3.0.0", "copy-webpack-plugin": "^7.0.0", "css-loader": "^5.0.1", "html-webpack-plugin": "^5.0.0-beta.6", "less": "^4.1.0", "less-loader": "^7.3.0", "postcss": "^8.2.4", "postcss-cli": "^8.3.1", "postcss-loader": "^4.1.0", "postcss-preset-env": "^6.7.0", "style-loader": "^2.0.0", "ts-loader": "^8.0.14", "webpack": "^5.14.0", "webpack-cli": "^4.3.1" "dependencies": { "@babel/runtime-corejs3": "^7.12.5", "core-js": "^3.8.3", "react": "^17.0.1", "react-dom": "^17.0.1", "regenerator-runtime": "^0.13.7"

index.ts

const message: string = "Hello TypeScript";
const foo = (info: string) => {
  console.log(info);
foo('111');
// const p = new Promise((resolve, reject) => {})
export {}