【问题标题】:npm install: Is there a way to ignore a particular dependency in package.jsonnpm install:有没有办法忽略 package.json 中的特定依赖项
【发布时间】:2018-05-02 14:42:55
【问题描述】:

我目前正在尝试为包含本地依赖项的 node.js 项目创建一个 docker 容器。这似乎会导致 docker 出现问题,因此作为一种解决方法,我试图仅复制本地依赖项文件夹并忽略它们在 package.json 文件中的依赖项条目。有没有办法指定我想忽略的依赖项并让 npm install 运行并跳过这些实体?

【问题讨论】:

    标签: node.js npm npm-install package.json


    【解决方案1】:

    这是一个常见问题,不仅在 Docker 中,而且在某些云部署中也是如此。例如,使用标准 Node.js buildpack 部署到 CloudFoundry 将导致 npm install/yarn 仍然运行。因此,您还需要应用一些技巧来使用本地模块

    如果你不介意从 NPM 切换到 Yarn 进行依赖管理,你可以使用 workspaces 功能。

    我的package.json 看起来像这样:

    {
    
      ...
    
      "dependencies": {
        "some-module-i-want-to-install": "1.0.0",
        "another-module-i-want-to-install": "1.0.0",
        "@my/local-dependency-one": "1.0.0",
        "@my/local-dependency-two": "1.0.0"
      },
      "workspaces": ["packages/*"]
    }
    

    而我的项目源码布局结构如下:

    .
    ├── index.js
    ├── package.json
    ├── packages
    │   ├── local-dependency-one
    │   │   ├── index.js
    │   │   └── package.json
    │   └── local-dependency-two
    │       ├── index.js
    │       └── package.json
    └── yarn.lock
    

    运行yarn后,我要安装的模块从NPM注册表中获取,本地依赖从packages目录安装到node_modules

    .
    ├── index.js
    ├── node_modules
    │   ├── @my
    │   │   ├── local-dependency-one
    │   │   │   └── ...
    │   │   └── local-dependency-two
    │   │       └── ...
    │   ├── another-module-i-want-to-install
    │   │   └── ...
    │   └── some-module-i-want-to-install
    │       └── ...
    ├── package.json
    ├── packages
    │   ├── local-dependency-one
    │   │   └── ...
    │   └── local-dependency-two
    │       └── ...
    └── yarn.lock 
    

    如您所见,我更喜欢将我的本地包定义为scoped (@my/...)。这不是强制性的,而是最佳实践。 NPM 将作用域包视为private by default,因此我不必担心它们会偶尔被发布或明确标记为私有。

    【讨论】:

      【解决方案2】:

      这可以使用devDependencies来完成

      只需要开发的 npm 模块,例如:单元测试、Coffeescript 到 Javascript 的转译、缩小等,使所需的模块成为 devDependency。

      若要跳过安装 devDepenencies,请将 --production 标志传递给 npm install,并将 --production 标志(或 NODE_ENV 环境变量设置为 productionnpm 不会安装 devDependencies 中列出的模块。"

      npm install --production
      

      要使任何模块成为 devDependencies 的一部分,请在安装时传递 --dev。

      npm install packagename --save-dev
      

      【讨论】:

      • 如果您确实需要开发依赖项(例如用于测试)但您想忽略一个,这将无济于事
      • 任何不涉及使用纱线的解决方案?此答案假定依赖项是实际的仅开发依赖项,但情况并非总是如此。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-11-07
      • 1970-01-01
      • 2021-09-09
      • 2020-07-28
      • 1970-01-01
      • 2021-12-04
      • 2019-09-03
      相关资源
      最近更新 更多