package.json, package-lock.json conflict

2020.01.12

GuithubでForkしたリポジトリ(node.jsで書かれている)を更新しようとして、package.json、package_lock.jsonがコンフリクトしてしまいました。その結果、パッケージインストール(npm i)がエラーになってしまって解決に1日を費やしてしまいました。私の環境は以下の通りです。

C:\Users\user>node -v
v14.15.3
C:\Users\user>npm -v
6.14.9

やりたかったこと。数年前に参考にしたいGithub上のリポジトリを、自分のリポジトリへForkしました。オリジナルをMaster、Fork先をDevelopとします。その後、Developは自身で多少ファイルを編集、追加しています。数年経つとMasterはオリジナルの作者がバグ修正や機能追加をしていますので、これをマージしておきたいと思い立ちました。

手順は以下の通り、リモートリポジトリを追加し、フェッチの後マージしています。何事もなければ…

>git remote add root_branch https://github.com/Master/xxxxxxxx.git
>git remote -v #リモートの確認
>git fetch root_branch
>git merge root_branch/develop #Developのリポジトリ

ところが、package-lock.jsonでコンフリクトが発生してしまいました。

>git merge root_branch/develop
Auto-merging package-lock.json
CONFLICT (content): Merge conflict in package-lock.json
Automatic merge failed; fix conflicts and then commit the result.

package-lock.jsonって何?は、https://qiita.comを参照させていただきました。無視していいけど消してはダメ、というファイルとのことです。具体的には、npm install によって実際にインストールしたパッケージのバージョンのみが記載されているとのこと。

コンフリクトの解決策としては、add, commit すればOKでした。

>git add package-lock.json
>git commit -m"package-lock"

次に、package.jsonでもコンフリクトが発生してしまいました。

> npm i
npm WARN conflict A git conflict was detected in package-lock.json. Attempting to auto-resolve.
npm WARN conflict To make this happen automatically on git rebase/merge, consider using the npm-merge-driver:
npm WARN conflict $ npx npm-merge-driver install -g
audited 12345 packages in 6.789s
found 0 vulnerabilities

この場合、package.jsonを編集するのが近道です。https://qiita.comを参照させていただきました。ローカルのコードを消して、マージするコードのもを残します。

<<<<<<HEAD # 消す
 # 消す
[ローカルブランチのコード] # 消す
 # 消す
======= # 消す

[マージするブランチのコード]

>>>>>>> # 消す

ここまでで、npm initができるようになりました。

Electronのインストール
2020.01.23

Electron を次の環境でインストールした時の記録です。Electronとは、Chrome のエンジンであるWebkitとNote.jsでアプリケーションを生成するソフトウェアフレームワークです。HTML, CSS, javascript を使ってWebアプリケーションを作ると、Electronを使って、WindowsやMacのアプリケーションを作ることができます。

インストールした環境
mac 10.15.7
node v14.15.3
Python 3.6.6

特殊事情として、プロキシの設定をしないとなりませんでした。npm の configuration ファイルに、プロキシを設定します。こちらの記事を参考にしました。

> npm -g config set proxy http://proxyserver.com:8080
> npm -g config set https-proxy http://proxyserver.com:8080

次のコマンドでconfigurationを確認できます。

> npm config list 
https-proxy = "http://proxyserver.com:8080/"
proxy = "http://proxyserver.com:8080/"

Electron をインストールするのは環境変数の設定が必要との記事を見つけましたので、設定しました。bash_profileに2行追加しました。

export ELECTRON_GET_USE_PROXY=true
export GLOBAL_AGENT_HTTPS_PROXY=http://proxyserver.com:8080/

普通にnpmでインストールしようとするとエラーになります。

>npm -g install electron
npm ERR! code EACCES 
npm ERR! syscall access 
npm ERR! path /usr/local/lib/node_modules 
npm ERR! errno -13 
npm ERR! Error: EACCES: permission denied, access '/usr/local/lib/ node_modules'
npm ERR! [Error: EACCES: permission denied, access '/usr/local/lib/ node_modules'] { 
npm ERR! errno: -13, 
npm ERR! code: 'EACCES', 
npm ERR! syscall: 'access', 
npm ERR! path: '/usr/local/lib/node_modules' 
npm ERR! } npm ERR! 
npm ERR! The operation was rejected by your operating system. 
npm ERR! It is likely you do not have the permissions to access this file as the current user 
npm ERR! n
pm ERR! If you believe this might be a permissions issue, please double-check the 
npm ERR! permissions of the file and its containing directories, or try running 
npm ERR! the command again as root/Administrator. 
npm ERR! A complete log of this run can be found in: 
npm ERR! /Users/user/.npm/_logs/2021-01-14T23_44_19_893Z-debug.log

sudo でインストールしてもエラーになります。

>sudo npm -g install electron
Error: EACCES: permission denied, mkdtemp '/usr/local/lib/node_modules/ electron/electron-download-GSvBrh'
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! electron@11.2.0 postinstall: `node install.js`
npm ERR! Exit status 1
npm ERR!
}
The operation was rejected by your operating system.
It is likely you do not have the permissions to access this file as the
npm ERR! Failed at the electron@11.2.0 postinstall script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR! /Users/user/.npm/_logs/2021-01-14T23_47_29_664Z-debug.log

インストールに成功したコマンドは以下でした。unsafe-permはroot権限で動作させることを許可するフラグ、allow-rootも同じような意味に思えますが、情報を見つけることができませんでした。

> sudo npm install -g init
> sudo npm install -g electron --unsafe-perm=true --allow-root 
> electron -v
v11.2.0