为什么 npm 可以直接跑 typescript

ponponon
  • 1.5k

npm 是什么?

node 与 npm 的关系
npm 是什么
npm 全称是 Node Package Manager ,意思是 Node 的包管理系统。是用来管理 js 的。
npm 的实现思路

有一个远程代码仓库(registy),在里面存放所有需要被共享的 js 代码,每个 js 文件都有自己唯一标识
用户想使用某个 js 的时候,只需引用对应的标识,js 文件就会自动下载下来

Node.js
Node.js 是什么

Node.js 是一个 Javascript 运行环境(runtime environment),不是一个 js 文件
Node.js 是一个基于 Chrome V8 引擎的 Javascript 运行环境,是用 C++ 写的
Node.js 不是库,是一个运行环境,或者说是一个 JS 语言解释器

我是一个后端工程师,最近接受了一个项目,其中包含了一些 vue 的内容

上手很简单,但是有些原理搞不明白

因为我看到 vue 中有很多代码都是 typescript 写的

图片.png

而 nodejs 是跑 js 而不是 typescript 的吧?

但是我可以直接 npm run build 编译得到一段 dist 下的 js、css 等等静态文件

我本来以为是要先把 ts 相关的通过 tsc 之类的变成 js,再使用 npm 来编译

但是现在好像不需要 ts 转 js 这一步了,是 npm run build 帮我做了吗?

参考:testdrivenio/flask-vue-crud


package.json 文件内容

{
  "name": "client",
  "version": "0.1.0",
  "private": true,
  "scripts": {
    "serve": "vue-cli-service serve",
    "build": "vue-cli-service build",
    "lint": "vue-cli-service lint"
  },
  "dependencies": {
    "axios": "^0.21.1",
    "bootstrap": "^4.6.0",
    "bootstrap-vue": "^2.21.2",
    "core-js": "^3.6.5",
    "vue": "^2.6.11",
    "vue-router": "^3.2.0"
  },
  "devDependencies": {
    "@vue/cli-plugin-babel": "~4.5.0",
    "@vue/cli-plugin-eslint": "~4.5.0",
    "@vue/cli-plugin-router": "~4.5.0",
    "@vue/cli-service": "~4.5.0",
    "@vue/eslint-config-airbnb": "^5.0.2",
    "babel-eslint": "^10.1.0",
    "eslint": "^6.7.2",
    "eslint-plugin-import": "^2.20.2",
    "eslint-plugin-vue": "^6.2.2",
    "vue-template-compiler": "^2.6.11"
  },
  "eslintConfig": {
    "root": true,
    "env": {
      "node": true
    },
    "extends": [
      "plugin:vue/essential",
      "@vue/airbnb"
    ],
    "parserOptions": {
      "parser": "babel-eslint"
    },
    "rules": {}
  },
  "browserslist": [
    "> 1%",
    "last 2 versions",
    "not dead"
  ]
}
回复
阅读 727
3 个回答

你可以看看npm的配置文件即package.json里面的script属性里的build命令,就知道npm run build到底做了什么。应该会有编译ts的命令,比如tsc,或者是执行一段脚本文件(来执行tsc)

vue-cli是vue官方提供的一套脚手架,底层是用的webpack。也就是说代码都是经过编译打包才呈现的,最终产物就是js,源头是ts或是其他都无所谓,只要你提供了相应的语法转换器就可以。正所谓——有了编译就可以为所欲为。

冯恒智
  • 7.8k
  1. vue包下面的东西不是给node用的,运行vue-cli-service build命令跑的是@vue/cli-service下的代码
  2. types下面是ts生成的类型定义文件,光靠这些文件即使是在typescript环境下也是跑不了的,node运行时更不会理会这些文件,vue-cli-service build实际运行的应该是这个文件https://unpkg.com/browse/@vue...
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏