如何本地安装Angular CLI(不使用-g标志)并解决子目录依赖问题
嘿,我完全懂你想把Angular CLI作为项目本地依赖管理的需求——这样团队里其他人拉取项目时,不用额外装全局CLI,直接npm install就能搞定所有依赖,确实是更规范的协作方式。你之前遇到的问题,其实是ng new命令的默认行为导致的:不管CLI是全局还是本地安装,ng new <项目名>本身就是用来创建一个带独立目录的全新Angular项目,所以才会生成带自己node_modules的子文件夹。
下面给你一套完整的解决方案,让你把Angular CLI和项目依赖都放在同一个本地目录里:
步骤1:准备项目根目录
先创建并进入你想要作为Angular项目根的文件夹:
mkdir my-angular-project && cd my-angular-project
步骤2:初始化package.json(可选但推荐)
如果需要提前创建项目的package.json(方便后续添加其他自定义依赖),执行:
npm init -y
步骤3:本地安装Angular CLI到开发依赖
把CLI装到项目的dev依赖里,这样它会被记录在package.json中:
npm install @angular/cli --save-dev
步骤4:在当前目录初始化Angular项目
关键来了——不要用ng new <子项目名>,而是用本地CLI在当前目录创建项目,避免生成子文件夹:
npx ng new . --skip-install --force
这里的参数解释:
npx:自动调用本地node_modules里的Angular CLI命令,不用全局安装也能执行.:指定在当前目录创建项目,而不是生成新的子目录--skip-install:告诉CLI不要自动执行npm install,我们之后自己统一安装--force:如果当前目录已经有package.json(比如之前执行了npm init),这个参数会强制合并配置,跳过非空目录的报错
步骤5:安装所有依赖
现在你的package.json已经包含了Angular项目的核心依赖,以及本地的Angular CLI,执行以下命令完成所有安装:
npm install
额外优化:添加npm脚本方便调用CLI
为了不用每次都敲npx ng,可以在package.json的scripts里添加快捷命令:
"scripts": { "ng": "ng", "start": "ng serve", "build": "ng build", "test": "ng test", "lint": "ng lint", "e2e": "ng e2e" }
之后你就可以用npm run ng <命令>执行CLI操作,比如npm run ng generate component my-component,或者直接用npm start启动开发服务器。
这样设置后,任何人从Git拉取你的项目,只需要执行npm install,就能同时安装好Angular运行依赖和本地CLI,完全不用全局安装Angular CLI啦!
内容的提问来源于stack exchange,提问作者Gil Epshtain

