如何将我的package.json指向我的primeNg的分支?

six*_*ude 5 node.js npm package.json primeng

我正在为Angular2使用一个非常优秀的小部件库,名为PrimeNg.

假设PrimeNg缺少我需要的一些功能,所以我将repo分叉并提交一个 pull请求以将我的更改转换为主repo.当我在等待pull请求被接受时,我想在我的package.json中包含我的repo的fork.

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

"dependencies": {
    ...
    "primeng": "1.0.0-beta.13",
    ...
}
Run Code Online (Sandbox Code Playgroud)

对此:

"dependencies": {
    ...
    "primeng": "JakeSummers/primeng.git#d35f5635a216005018bed89d249816e0f65f68f6",
    ...
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,这不起作用.

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

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

0 directories, 3 files
Run Code Online (Sandbox Code Playgroud)

在更改为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
Run Code Online (Sandbox Code Playgroud)

进一步看看package.json文档,看起来我可能不会这样做

对于非特定于平台的构建步骤,例如将CoffeeScript或其他语言编译为JavaScript,请使用预发布脚本执行此操作,并使所需的包成为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"
}
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

Ale*_*kii 5

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

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

您可能可以从这些点看出解决方案是什么;几个想法:

\n\n
    \n
  1. 编译并将生成的.js文件签入 git 存储库;
  2. \n
  3. npm publish作为脚本的一部分进行编译prepublish
  4. \n
  5. 编译为npm install:\n\n的一部分
      \n
    • 从中删除.ts文件.npmignore
    • \n
    • 将所有内容从 拉devDependenciesdependencies
    • \n
    • 添加postinstall脚本。
    • \n
  6. \n
\n\n

第一个选项最容易实现,但也最容易出错 \xe2\x80\x94 很容易忘记在提交之前运行编译步骤,因此您可能希望将其添加到 git hook 中。但到那时,你最好选择第二或第三。

\n\n

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

\n\n
\n\n

从 Github 安装*

\n\n

看来npm install您提到的是正确的,尽管我主张采用更明确的格式:

\n\n
// The thing that actually gets saved into `package.json`:\ngithub:${username}/${repository}#${optional-id}\n\n// So the command would be:\nnpm install github:JakeSummers/primeng#d35f5635a216005018bed89d249816e0f65f68f6\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n


Jas*_*say -2

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

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