1.GitHubからNode.jsのPackageをforkし、
2.ローカルで開発する
という流れを作って、OSSにPRを送ってみたい。
1.GitHubでforkし
2.git clone url
を実行する。
Dockerコンテナ内(node14.15.3-alpine
)で実行していたら、上記のエラーが出たので、gitをインストールする。Dockerfile
にも記載しておく。
apk add git
index.js
が設定される。const modules = require("modules") // CommonJS // ES modules import Foo from "modules" // 1つ import { Foo } from "modules" // 複数ある場合 import { Foo as MyFoo } from "modules" // 名前をつけて import { default as MyFoos } from 'modules'; // default exportの場合 import { * as MyFoos } from 'modules'; // まとめて // ※あまり詳しくないので、これから勉強
を実行した場合、index.js
に記載されているexports
のオブジェクトが返ってくる。
{ "main": "dist/index.js" }
※結構出てくるesm
はES modulescjs
はCommonJSをだいたい意味する。
npm install
した際に、package.json
にinstall
の記述がない場合、node-gyp rebuild
が実行されるみたい。
だが、Docker内で実行したら、dist/
が生成されなかったので、npm install
した後に、npm run build
を実行し、dist/
の生成を確認。(scripts
にdist/
に吐き出す設定は書いてある。)
の順番で実行される。実際にログを見るとこの順番で実行されている。
fork_modules
というディレクトリを作り、forkしてきたリポジトリを置いてみた。
mkdir fork_modules cd fork_modules npm install npm run build
dist/index.js
ができていることを確認する。
プロジェクトに戻り、
yarn add ./fork_modules/{modules}
package.json
にはこのような形で、記載された。
{ "dependencies": { "modules": "./fork_modules/modules/" } }
※プロジェクトにyarn
を使っていて、moduleのビルドにnpm
を使っています。
"modules": "git+{https://github.com/username/リポジトリ名}"
で指定する。
ブランチ・タグ・コミットハッシュ値を指定する場合は、#
で指定する。
{ "dependencies": { "modules": "git+https://github.com/username/リポジトリ名.git" }
上記が完了したら、npm install
を実行する。
冷静に考えて、毎回ファイルを変更する度に、npm run build
した後に、yarn install
するのも面倒くさいので、そのまま相対パスで読み込むことにした。
ビルド前のソースコードはsrc/
にあったので、そのまま読み込む。
import { Foo as Bar } from '../fork_modules/modules/src/index'
import { Foo as Bar } from '../fork_modules/modules/dist/index'
実際のscripts
は以下のような形。
"scripts": { "build": "npm run build:cjs && npm run build:esm && webpack", "build:cjs": "BABEL_ENV=cjs babel src --out-dir ./dist/cjs", "build:esm": "BABEL_ENV=esm babel src --out-dir ./dist/esm" }
そしてよく見てみたら、開発サーバーの起動もありましたw 読みづらいなあと思っていたが、webpackのbundle済ファイルでした。ちゃんと読みやすかった。
"dev": "webpack-dev-server --hot --inline"
npm run dev
node_modules
に配置される。export
, import
, etc)module.exports
, require()
, etc)
現在および古いブラウザまたは環境でECMAScript2015 +コードを下位互換性のあるバージョンのJavaScriptに変換するために主に使用されるツールチェーンです。