5

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

假设 PrimeNg 缺少一些我需要的功能,所以我分叉了 repo 并提交了一个 pull request以将我的更改放入主 repo。在等待拉取请求被接受时,我想在我的 package.json 中包含我的 repo 分支。

我尝试从这里更新我的 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 文档,看起来我可能没有这样做

对于非平台特定的构建步骤,例如将 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"
}

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

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

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

将此问题交叉发布到 PrimeNg git repo。

4

2 回答 2

4

问题是您在 Typescript 中有源代码,但您需要在 npm 包中编译 JS。很遗憾:

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

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

  1. 编译生成的.js文件并将其签入 git 存储库;
  2. 作为脚本的一部分进行编译npm publishprepublish
  3. 编译为npm install
    • 从中删除.ts文件.npmignore
    • 把所有东西都拉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

* 还支持从它自己的注册表和 githubnpm以外的地方安装,如果你好奇的话,看看这里的“包”是什么。

于 2016-09-18T13:09:39.093 回答
-2

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

如果您需要重新运行发布内容,请在推送代码之前执行此操作,可能是类似npm run prepublish. 并非所有软件包都需要它,因此如果没有它,请不要假设。

于 2016-08-31T00:00:43.263 回答