Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

create-book を akabeko がリリースしてみる #23

Closed
akabekobeko opened this issue Apr 5, 2021 · 27 comments
Closed

create-book を akabeko がリリースしてみる #23

akabekobeko opened this issue Apr 5, 2021 · 27 comments
Labels
enhancement New feature or request
Milestone

Comments

@akabekobeko
Copy link
Member

npmjs の publish 権を設定していただいたのと累積修正を反映するため、引き継ぎの一貫として私が create-book をリリースしてみる。本 issue にはその過程で起きたことなどを記録してゆく。

@akabekobeko akabekobeko added the enhancement New feature or request label Apr 5, 2021
@akabekobeko akabekobeko changed the title create-book を akabeko がリリース可能にする create-book を akabeko がリリースしてみる Apr 5, 2021
@akabekobeko
Copy link
Member Author

現状メモ。

  • npmjs に私と村上さんの publish 権限がある
  • npmjs の本プロジェクトは 2FA 必須となっていて私と村上さんアカウントは設定している
  • package.json の devDependencies に release-it がありルートに .release-it.yml もあるため、これを利用するのだと予想

@akabekobeko
Copy link
Member Author

akabekobeko commented Apr 5, 2021

まずは npm-scripts に定義された release コマンドを実行してみる。

$ npm run release

> create-book@0.1.6 release
> release-it

✖ npm test
ERROR npm ERR! Missing script: "test"
npm ERR!
npm ERR! To see a list of scripts, run:
npm ERR!   npm run

npm ERR! A complete log of this run can be found in:
npm ERR!     /Users/akabeko/.npm/_logs/2021-04-05T12_28_32_871Z-debug.log

テストがないためエラーになる。これは .release-it.yml の定義によるもの。

hooks:
  before:init: npm test

将来テストを追加するかもしれないので npm-scripts に test を追加してみる。

{
  "scripts": {
    "test": "echo \"Test is not implemented\""
  }
}

@akabekobeko
Copy link
Member Author

再び、実行。

$ npm run release

> create-book@0.1.6 release
> release-it

✔ npm test
ERROR Working dir must be clean.
Please stage and commit your changes.
Documentation: https://git.io/release-it-git

さっきの npm-scripts が commit されていないためかエラーになる。commit しておく。

@akabekobeko
Copy link
Member Author

これで通るはず。dry-run してみる。

$ npm run release                                                                       [~/Documents/dev/vivliostyle/create-book]

> create-book@0.1.6 release
> release-it

✔ npm test

🚀 Let's release create-book (currently at 0.1.6)


Changelog:
# [0.2.0](https://github.com/vivliostyle/create-book/compare/v0.1.6...v0.2.0) (2021-04-05)

### Features
* Update vivliostyle.config.js template ([5928406](https://github.com/vivliostyle/create-book/commit/592840649a4ee09eb267992dd933ca4e97ca2fac))
* Update vivliostyle.config.js template ([210e925](https://github.com/vivliostyle/create-book/commit/210e925a5ad2d58bd21828417e2acd6920049b3c))


Changeset:
M package.json

? Publish create-book to npm? No
? Commit (chore: release v0.2.0)? No
? Tag (v0.2.0)? No
? Push? No
? Create a release on GitHub (v0.2.0)? No
🏁 Done (in 19s.)

OK。いけるっぽい。本番実行してみる。

@akabekobeko
Copy link
Member Author

実行してみたが最後でエラーになった。OTP の部分は 2FA のワンタイムキーと思われるので npmjs と連携済みの Google Authenticator が生成したものを入力。

? Publish create-book to npm? Yes
? Please enter OTP for npm: 381122
? Commit (chore: release v0.2.0)? Yes
ERROR Error: npm ERR! could not determine executable to run

npm ERR! A complete log of this run can be found in:
npm ERR!     /Users/akabeko/.npm/_logs/2021-04-05T12_51_47_845Z-debug.log

原因を調査する。

@akabekobeko
Copy link
Member Author

ログの当該箇所。

27 verbose stack Error: could not determine executable to run
27 verbose stack     at Exec.getBinFromManifest (/usr/local/lib/node_modules/npm/lib/exec.js:325:25)
27 verbose stack     at Exec._exec (/usr/local/lib/node_modules/npm/lib/exec.js:163:22)

これだけでは何が問題なのかわからない。

@akabekobeko
Copy link
Member Author

エラーとなっているのに npmjs の publish は成功しているようだ。

GitHub 連携が上手くいっていないのかもしれない。そもそも npm-scripts に test を追加しないと動かないので release-it を利用せず手動で npm publish していた可能性がある。

GitHub 連携設定は継続調査するとして publish されたものが本当に更新されているのか npm create book を実行して確認しておく。あとリポジトリーのタグ打ちや Releases 更新も今回は手動でやっておく。

@MurakamiShinyu
Copy link
Member

https://github.com/vivliostyle/create-book/blob/master/package.json#L4
"version": "0.1.6" のままですね。

@akabekobeko
Copy link
Member Author

npm create book sample して生成された package.json を見ると

{
  "dependencies": {
    "@vivliostyle/cli": "next",
    "@vivliostyle/theme-slide": "^0.3.0"
  }
}

のようになっていた。template のものは cli を latest としているのに反映されておらず next のままだ。publish には成功したが問題は修正されていない。

これが release-it でエラーとなったからなのか npm create book を実行するために別の手続きが必要なのか調べる必要がある。通常 package.jsonbin を設定して npx PACKAGENAME とするものだが npx ではなく npm で実行している仕組みがわからない。

複数の問題があるので整理する。

  • 私が引き継いだ状態のプロジェクトでは release-it が失敗する
    • npm-scripts に test コマンドが未定義のため
    • test を定義すれば実行可能となる
  • npm run release 経由で release-it を実行すると publish は成功するがエラーになる
    • ERROR Error: npm ERR! could not determine executable to run
    • npmjs 上では更新されたバージョンになっている
    • Git リポジトリーに対する package.jso 変更、タグ付け、GitHub の Releases は更新されない

@akabekobeko
Copy link
Member Author

手動で package.json を書き換えて npm publish してみる

@akabekobeko
Copy link
Member Author

手動で package.json"version": "0.2.1" にして npm publish したところ成功。よって release-it の問題は Git/GitHub 連携処理のみと思われる。

publish されたので npm create book sample してみると、やはり cli は latest のままである。

publish したイメージがおかしいか切り分けるため生成されたプロジェクトに npm i create-book して node_moduels の中身をチェックしたら templates は最新になっていた。また npm pack で生成されたリリース用イメージ相当の圧縮ファイルも展開すると templates は最新となっている。

よって

  • npmjs に publish されているものは最新
  • npm create book から呼び出されるものが古い

となる。前述のように通常 npm をインストールせず次回に CLI を呼び出すには npx 経由となるので、これをせず npm から呼び出せるようにする何らかの方法や手続きがあるのだろう。それを調べて解決する必要がある。

@akabekobeko
Copy link
Member Author

以下のプロジェクトにより実現されている仕組みと思われるため、調べる。

@akabekobeko
Copy link
Member Author

調査は継続するが create-create-app の issue へも質問を投稿しておいた。

@akabekobeko
Copy link
Member Author

返信あり。npm cli のバグらしい。

7.8.0 で修正されるらしいので更新した環境にて

  • create-book を npm publish し直す
  • npm create book sample を実行する

を試したが古い templates/default が反映されていた。生成された sample 内で npm i create-book したら create-book とその中の templates/default は最新だったので npm cli のバグが 7.8.0 では修正されていないか、他の要因があるのだと思われる。

@MurakamiShinyu
Copy link
Member

こちらでもテストしてみました。

npmなどのバージョンは最新にしました:

$ npm --version
7.11.2
$ npx --version
7.11.2
$ node --version
v16.1.0

それで npx create-booknpm create book と同じこと)で create-book のバージョンを見ると:

$ npx create-book --version
Need to install the following packages:
  create-book
Ok to proceed? (y) y
0.1.6

create-book が古いバージョン 0.1.6 になってました。過去に使った create-book が npx の cache に残っているためのよう。

そこで、 npx の cache を削除(参考: https://stackoverflow.com/questions/63510325/how-can-i-clear-the-central-cache-for-npx):

$ rm -rf ~/.npm/_npx

それから再度 npx create-book --version を実行すると:

$ npx create-book --version
Need to install the following packages:
  create-book
Ok to proceed? (y) y
npm WARN deprecated core-js@2.6.12: core-js@<3.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Please, upgrade your dependencies to the actual version of core-js.
0.3.1

こんどは最新版 0.3.1 になりました。

試しに、もう一度 npx cache を削除して、create-bookの古いバージョンを指定(create-book@0.1.6)して npx でインストールし、それからバージョン指定なしで npx create-book --version を実行してみました:

$ rm -rf ~/.npm/_npx

$ npx create-book@0.1.6 --version
Need to install the following packages:
  create-book@0.1.6
Ok to proceed? (y) y
npm WARN deprecated core-js@2.6.12: core-js@<3.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Please, upgrade your dependencies to the actual version of core-js.
0.1.6

$ npx create-book --version
Need to install the following packages:
  create-book
Ok to proceed? (y) y
npm WARN deprecated core-js@2.6.12: core-js@<3.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Please, upgrade your dependencies to the actual version of core-js.
0.3.1

今度は直前に古いバージョンをインストールしたにもかかわらず、最新バージョンになりました。
npx の cache にあるものよりも online のものが優先されるという動作(npm/cli@37613e4 によって修正されたもの) になっているようです。どうして最初はそうならなかったのか、よくわかりません。

結論としては、 create-book が最新にならないときは、 npx の cache を削除するとよい、ということになります。

それから、 yarn create book の場合には、この問題はなくて、常に最新の create-book がグローバルインストールされるようです。(yarn global add create-book のあと create-book を実行するのと同じことが行われるよう)

@akabekobeko
Copy link
Member Author

調査ありがとうございます。私の手元で実験してみたところ、古いままでした。

$ node -v
v16.1.0

$ npm -v
7.11.2

$ npx -v
7.11.2

$ ls ~/.npm
_cacache			_logs				anonymous-cli-metrics.json
_libvips			_prebuilds			eresolve-report.txt
_locks				_update-notifier-last-checked	node-sass

$ rm -rf ~/.npm/_npx
$ npx create-book --version
0.1.6

ls の時点で _npx が存在しないため、ここにはキャッシュされていないようです。そのため続けて削除コマンドとバージョン確認しても古いバージョンになっています。

私の環境は Node.js + npm を Homebrew でインストールしているのですが、それも関係ありそうな気がします。

@akabekobeko
Copy link
Member Author

補足。rm -rf ~/.npm/_npx の後に npm create book sample を実行すると前述のような状態であるため、古い状態でプロジェクトが生成されます。

Homebrew で Node.js + npm をインストールしているユーザーはそれなりに存在すると思われるため、この環境でキャッシュを削除できないか、または別の方法で最新を実行できないかを継続調査します。

@akabekobeko
Copy link
Member Author

npm のキャッシュ削除を試すも効果なし。

$ npm cache clean --force
npm WARN using --force Recommended protections disabled.

$ npx create-book --version
0.1.6

@MurakamiShinyu
Copy link
Member

古い create-book がグローバルインストールされているのではないですか?
過去に yarn create book を実行したことがあると yarn global add create-book でのグローバルインストールと同じことになっています。

その場合にどうなるか、試してみました:

$ yarn global add create-book@0.1.6           # 古いcreate-bookをグローバルインストール
yarn global v1.22.10
[1/4] 🔍  Resolving packages...
warning create-book > create-create-app > gitconfig > argx > iftype > babel-runtime > core-js@2.6.12: core-js@<3.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Please, upgrade your dependencies to the actual version of core-js.
[2/4] 🚚  Fetching packages...
[3/4] 🔗  Linking dependencies...
[4/4] 🔨  Building fresh packages...
success Installed "create-book@0.1.6" with binaries:
      - create-book
✨  Done in 5.59s.

$ create-book --version
0.1.6

$ npx create-book --version
0.1.6

↑このように npx create-book で古いままになる。

yarn global remove create-book でアンインストールするとOKのはずです。

なお npm install -g create-book でグローバルインストールした場合も同様でした。

@MurakamiShinyu
Copy link
Member

https://www.npmjs.com/package/npx

By default, npx will check whether <command> exists in $PATH, or in the local project binaries, and execute that. If <command> is not found, it will be installed prior to execution.

@akabekobeko
Copy link
Member Author

yarn 側はインストールされていないようで削除コマンドを実行したらエラーになりました。念の為、コマンド存在の確認、npm 側のグローバル削除、npx キャッシュ削除を実行した後にバージョン確認しましたが古いままです。

$ which create-book
create-book not found

$ yarn global remove create-book
yarn global v1.22.10
warning package.json: No license field
[1/2] 🗑  Removing module create-book...
error This module isn't specified in a package.json file.
info Visit https://yarnpkg.com/en/docs/cli/global for documentation about this command.

$ npm un -g create-book

up to date, audited 1 package in 184ms

found 0 vulnerabilities

$ rm -rf ~/.npm/_npx

$ npx create-book --version
0.1.6

なお yarn も Homebrew で入れていますがこちらで yarn create book sample を実行するとちゃんと最新バージョンになるのは村上さん環境と同様でした。

私の環境固有な問題かもしれません。念の為 Homebrew の Node.js + npm + インストールされた npm を全消しして再構築してから試してみます。

@akabekobeko
Copy link
Member Author

再構築してみましたがダメですね。

$ npm uninstall -g npm 

removed 254 packages, and audited 1 package in 622ms

$ rm -rf ~/.npm

$ brew uninstall node
Error: Refusing to uninstall /usr/local/Cellar/node/16.1.0
because it is required by yarn, which is currently installed.
You can override this and force removal with:
  brew uninstall --ignore-dependencies node

$ brew uninstall --ignore-dependencies node 
Uninstalling /usr/local/Cellar/node/16.1.0... (2,778 files, 48.9MB)

$ brew install node

$ node -v
v16.1.0

$ npm -v
7.11.2

$ npx -v
7.11.2

$ npx create-book --version
0.1.6

あと npm を削除したつもりでしたが再構築直後で残っていました。

$ npm ls -g --depth=0
/usr/local/lib
├── fixpack@3.0.6
├── npm-check-updates@9.1.2
├── npm@7.11.2
└── textlint@11.6.3

継続調査します。

@akabekobeko
Copy link
Member Author

akabekobeko commented May 9, 2021

これを試してから

再構築してもダメだった。グローバル npm は消えたが create-book は古いまま。再構築の際にホーム ディレクトリを確認したら ~/node_modules があって、その中の create-book は 0.1.6 だった。npm と yarn のグローバル削除コマンドを経てもなぜか残っている。そこでこれらを手動で削除。念の為 create-create-app も。

$ rm  -rf ~/node_modules/create-book
$ rm  -rf ~/node_modules/create-create-app

その後にバージョン確認。インストールを求められる。これがキャッシュになるのだろうか。

$ npx create-book --version
Need to install the following packages:
  create-book
Ok to proceed? (y) y
npm WARN deprecated core-js@2.6.12: core-js@<3.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Please, upgrade your dependencies to the actual version of core-js.
0.3.1

この後だと ~/node_modules/ に create-book と create-app はない。そして以下のようになる。

$ npx create-book --version
0.3.1

更に ~/.npm/_npx/32ffe46154386029/node_modules へ create-book があることを確認。これで環境が正常になったかもしれない。

@akabekobeko
Copy link
Member Author

@MurakamiShinyu
次の create-book で 0.3.1 から更新されない場合、改めて調査しようと思います。とりあえず最新が入るようになったので他の issue へ着手します。調査の協力、ありがとうございました!

@MurakamiShinyu
Copy link
Member

https://www.npmjs.com/package/npx

By default, npx will check whether <command> exists in $PATH, or in the local project binaries, and execute that. If <command> is not found, it will be installed prior to execution.

~/node_modules/create-book が存在したということは、 ~/node_modules/.bin/create-bookcreate-book/lib/cli.js へのリンク)が存在したということで、 この npx の動作仕様の "or in the local project binaries" に該当するケースですね。

@MurakamiShinyu
Copy link
Member

@akabekobeko
create-book のバージョンが npm 上は 0.3.1 なのに、 https://github.com/vivliostyle/create-book/releases では 0.1.6 のままです。

手動でのリリースの場合、 npm publish だけでなくgit上のバージョンのタグ付けとrelease作成も手動でする必要があるかと思います。

$ git tag v0.3.1
$ git push origin v0.3.1

それから https://github.com/vivliostyle/create-book/releases の "Draft a new release" ボタンから Release 作成

@akabekobeko
Copy link
Member Author

とりあえず releases を更新しておきました。

release-it で自動化したい (現在はエラーになる) のでこちらも調べます。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

2 participants