【问题标题】:How to point my package.json at my fork of primeNg?如何将我的 package.json 指向我的 primeNg 分支?
【发布时间】:2017-01-07 08:32:48
【问题描述】:

我正在使用一个非常出色的 Angular2 小部件库,称为 PrimeNg。

假设 PrimeNg 缺少一些我需要的功能,所以我分叉了 repo 并提交了一个 pull request 让我的更改成为主要内容 回购。在等待拉取请求被接受时,我想包括我的 fork 我的 package.json 中的仓库。

我尝试从这里更新我的 package.json:

"dependencies": {
    ...
    "primeng": "1.0.0-beta.13",
    ...
}

对此:

"dependencies": {
    ...
    "primeng": "JakeSummers/primeng.git#d35f5635a216005018bed89d249816e0f65f68f6",
    ...
}

不幸的是,这不起作用。

查看我的 node_modules 目录,我们发现它基本上是空的:

[Aug-30 18:04][node_modules]$ tree primeng/
primeng/
├── LICENSE.md
├── package.json
└── README.md

0 directories, 3 files

在更改我的 package.json 之前,该目录包含以下内容:

primeng/
├── components
│   ├── accordion
│   │   ├── accordion.d.ts
│   │   ├── accordion.js
│   │   └── accordion.js.map
│   ├── autocomplete
│   │   ├── autocomplete.d.ts
│   │   ├── autocomplete.js
│   │   └── autocomplete.js.map
│   ├── breadcrumb
│   │   ├── breadcrumb.d.ts
│   │   ├── breadcrumb.js
│   │   └── breadcrumb.js.map
│   ├── button
│   │   ├── button.d.ts
│   │   ├── button.js
│   │   └── button.js.map
│   ├── calendar
│   │   ├── calendar.d.ts
...
├── LICENSE.md
├── package.json
├── primeng.d.ts
├── primeng.js
├── primeng.js.map
├── prod
│   ├── application.js
│   ├── polyfills.js
│   └── vendor.js
└── README.md

62 directories, 195 files

进一步查看package.json docs,看起来我可能没有这样做

对于非特定于平台的构建步骤,例如将 CoffeeScript 或其他语言编译为 JavaScript,请使用 prepublish 脚本执行此操作,并将所需的包设置为 devDependency。

例如:

{ "name": "ethopia-waza",
      "description": "a delightfully fruity coffee varietal",
      "version": "1.2.3",
      "devDependencies": {
        "coffee-script": "~1.6.3"
      },
      "scripts": {
        "prepublish": "coffee -o lib/ -c src/waza.coffee"
      },
      "main": "lib/waza.js"
}

预发布脚本将在发布之前运行,以便用户可以使用该功能,而无需他们自己编译。在开发模式下(即本地运行 npm install),它也会运行此脚本,以便您轻松测试。

primeNg 项目的 package.json 没有预发布脚本,我正在讨论是否需要添加一个,如果需要如何添加?该脚本何时运行?它会在从 git repo 拉取时运行吗?

任何指针或示例将不胜感激。谢谢!

Cross-posted this question to the PrimeNg git repo.

【问题讨论】:

  • 两张反对票?为什么?

标签: node.js npm package.json primeng


【解决方案1】:

问题是你在 Typescript 中有源代码,但是你需要在 npm 包中编译 JS。不幸的是:

  • .npmignore文件excludes所有打字稿源;
  • typescript 编译器在devDependencies 中,这意味着它不会被npm install --production 拉取;
  • 没有自动编译的prepublishpostinstall 脚本。

您可能可以从这些方面看到解决方案;几个想法:

  1. 编译生成的.js 文件并将其签入到 git 存储库中;
  2. 使用prepublish 脚本作为npm publish 的一部分编译;
  3. 编译为npm install的一部分:
    • .npmignore 中删除.ts 文件;
    • 将所有内容从devDependencies 拉入dependencies
    • 添加postinstall脚本。

第一个选项最容易实现,但也最容易出错——在提交之前很容易忘记运行编译步骤,所以你可能希望将它添加到 git hook 中。但到那时,你最好选择 2-nd 或 3-rd。

如果您决定使用第二个并设置使用自己的 fork,请确保在安装软件包时执行 prepublish 脚本。


关于从 Github 安装*

看起来你提到的npm install 是正确的,但我会提倡更明确的格式:

// The thing that actually gets saved into `package.json`:
github:${username}/${repository}#${optional-id}

// So the command would be:
npm install github:JakeSummers/primeng#d35f5635a216005018bed89d249816e0f65f68f6

* npm还支持从自己的registry和github以外的地方安装,看看here是什么“包”,如果你好奇的话。

【讨论】:

    【解决方案2】:

    最简单的方法是在 master 上制作您想要的代码,然后在 package.json 中将其列为普通的旧 JakeSummer/primeng

    如果您需要重新运行发布内容,请在推送代码之前执行此操作,可能是像 npm run prepublish 这样的命令。不是所有的包都需要这个,所以不要假设它没有它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-12-12
      • 2012-05-02
      • 2014-07-06
      • 1970-01-01
      • 1970-01-01
      • 2013-08-19
      • 2020-02-12
      • 2020-06-12
      相关资源
      最近更新 更多