美文网首页
TypeScript的模块化开发(九)

TypeScript的模块化开发(九)

作者: 未路过 | 来源:发表于2022-09-23 00:22 被阅读0次

    1. 模块化开发

    1.1webpack配置

    https://mp.weixin.qq.com/s/wnL1l-ERjTDykWM76l4Ajw
    大概:
    创建一个文件夹
    然后npm init
    然后就有了packge.json
    然后npm i webpack wabpack-cli -D
    在目录下建webpack.config.js
    然后给package.json中的scripts增加
    "build":"webpack"

      "scripts": {
        "test": "echo \"Error: no test specified\" && exit 1",
        "build": "webpack"
      },
    

    打包的时候会读取配置文件,所有然后配置webpack.config.js
    这个时候webpack是不会对ts做编译的,所以我们要安装ts-loader,
    ts-loader利用typescript对ts文件做编译,所以我们也要下载typescript
    npm install ts-loader typescript -D
    但是还是会报错,因为我们需要tsconfig.json这个ts的配置文件
    tsc --init
    会自动帮我们生成一个tsonfig.json文件
    npm run build
    然后输出bundle.js 创建index.html中引入这个js文件就OK了。
    优化,我们搭建一个本地服务
    npm install webpack-dev-server -D
    修改package.json

      "scripts": {
        "test": "echo \"Error: no test specified\" && exit 1",
        "build": "webpack",
        "serve": "webpack serve"
      },
    

    然后再项目文件下增加index.html文件,!+enter就ok
    安装
    npm install html-webpack-plugin -D
    接下来npm run serve跑起来就可以了

    const path = require('path')
    const HtmlWebpackPlugin = require('html-webpack-plugin')
    
    module.exports = {
      mode: "development",
      entry: "./src/main.ts",
      output: {
        path: path.resolve(__dirname, "./dist"),
        filename: "bundle.js"
      },
      devServer: {
      },
      resolve: {
        extensions: [".ts", ".js", ".cjs", ".json"]
      },
      module: {
        rules: [
          {
            test: /\.ts$/,
            loader: 'ts-loader'
          }
        ]
      },
      plugins: [
        new HtmlWebpackPlugin({
          template: "./index.html"
        })
      ]
    }
    

    1.2 创建文件夹

    在文件夹下面创建src文件夹
    在src下面创建utils文件夹
    utils文件夹下面创建math.ts

    export function add(num1: number, num2: number) {
      return num1 + num2
    }
    
    export function sub(num1: number, num2: number) {
      return num1 - num2
    }
    

    在src下面创建main.ts,

    import { add, sub } from "./utils/math";
    
    console.log(add(20, 30));
    console.log(sub(20, 30));
    

    npm run serve
    结果就会打印出来。

    2.命名空间namespace

    image.png

    命名空间其实就是把我们的一个模块儿再来划分对应的一些作用域,
    比如utils里面有个format.ts文件
    里面有两个format函数
    一个是format时间,一个format数字

    export function format(time: string) {
      return "2222-02-22"
    }
    
    export function format(price: number) {
      return "99.99"
    }
    

    会出现命名冲突的问题
    解决方法1就是改名字,把两个format的名字都改了,这样就不会命名冲突。
    第二个就是给这两个format他们命名空间。

    namespace time {
      export function format(time: string) {
        return "2222-02-22";
      }
      export function foo() {}
      export let name: string = "abc";
    }
    
    namespace price {
      export function format(price: number) {
        return "99.99";
      }
    }
    //time.format()
    //price.format()
    time.name;
    time.foo;
    /* 
    因为命名空间里面的东西默认它只属于它内部,如果你想在外面能拿到它的时候,是必须要把它export出去的,就是foo函数前面加export name前面加export
    */
    
    

    如果现在外面的文件使用怎么办呢?
    就需要导出命名空间,就是再命名空间前面加export

    export namespace time {
      export function format(time: string) {
        return "2222-02-22";
      }
      export function foo() {}
      export let name: string = "abc";
    }
    
    export namespace price {
      export function format(price: number) {
        return "99.99";
      }
    }
    
    

    再main.ts中

    import { add, sub } from "./utils/math";
    import { time, price } from "./utils/format";
    
    console.log(add(20, 30));
    console.log(sub(20, 30));
    
    console.log(time.format("111111"));
    console.log(price.format(123));
    
    

    npm run serve
    就会打印出来结果
    50
    -10
    2222-02-22
    99.99

    相关文章

      网友评论

          本文标题:TypeScript的模块化开发(九)

          本文链接:https://www.haomeiwen.com/subject/tquiortx.html