首页 > 解决方案 > 如何仅安装 typescript 依赖项并构建(package.json,npm),构建时避免 150MB 的依赖项

问题描述

我想知道是否有办法:

这更像是一个疑问而不是现在的需要

我有以下依赖项:

    "devDependencies": {
        "@types/node": "^16.0.0",
        "@typescript-eslint/eslint-plugin": "^4.31.1",
        "@typescript-eslint/parser": "^4.31.1",
        "commitizen": "^4.2.4",
        "cz-conventional-changelog": "3.3.0",
        "eslint": "^7.12.1",
        "eslint-config-prettier": "^8.3.0",
        "eslint-config-standard": "^16.0.3",
        "eslint-plugin-import": "^2.22.1",
        "eslint-plugin-node": "^11.1.0",
        "eslint-plugin-prettier": "^4.0.0",
        "eslint-plugin-promise": "^5.0.0",
        "prettier": "^2.4.1",
        "ts-node-dev": "^1.1.8",
        "typescript": "^4.3.5"
    },
    "dependencies": {
        "dotenv": "^10.0.0"
    }

而且我注意到了一点,我在编译 typescript 时有很多无用的依赖项,因为只是为了编译,我只需要 3 个:

    "devDependencies": {
        "@types/node": "^16.0.0",
        "typescript": "^4.3.5"
    },
    "dependencies": {
        "dotenv": "^10.0.0"
    }

只有这 3 个依赖项才 60MB,如果我真的想要,我可以编译,删除依赖项并使用npm install --production大约 1MB 的东西,这对我来说很棒,因为最终可以尽可能轻(有点夸张,但很酷)。现在,当我完全npm install处理所有依赖项时,我达到了 150MB(这真的令人失望)。

我的问题是,有一种方法可以最小化构建过程中安装的依赖项,而不是将类型移动到依赖项(因为它们不是“生产”依赖项,仅用于“构建”)?

实际上在构建时我这样做:

npm i
npm run build
rm -rf node_modules # not sure if needed
npm i --production

这将生成一个小版本,但在此过程中,我需要安装大约 150MB 的不需要的软件包。

笔记:

标签: node.jstypescriptnpmtypescript-typings

解决方案


这里的问题不在最终构建中,而是在下载不必要的依赖项的过程中

这是在docker中完成的吗?

存在一个解决方案 - 您根据 package-lock.json 或 yarn.lock 的内容缓存依赖项

https://medium.com/@stepanvrany/how-to-build-nodejs-docker-image-using-cache-c401137661d0


推荐阅读