なぜ、インラインにするか・・・って?
Lambdaで動かすためですよ。
qiita.com
【1】Cloud9に環境を作る
【2】yarnを入れる
Cloud9にYarnをインストールする - Qiita
まず、yarnを入れます。
$ npm init -y $ npm install -g yarn
- gでグローバル指定でyarnを入れないとパスが入らないようで、続くyarnコマンドが実行できない。
"npm i -D yarn"ではダメみたい。
【3】webpackを入れる
yarn, webpack, babel, ビルドできる環境を作る - Qiita
$ yarn add webpack webpack-cli html-webpack-plugin --dev
devDependenciesは開発時にのみ必要なモジュール
dependenciesは実行時にも必要なモジュール
・・・とのことです。では、今回の方針(後述)であれば、--devで良いか。
【4】html-webpack-inline-source-pluginを入れる
Webpackでjsファイル、cssファイル、画像ファイルをインラインにする方法 - Qiita
$ yarn add -D html-webpack-inline-source-plugin
npmと同じで-Dって、きっと--devのことだよね。
さて、cloud9からlambdaを作成することができるので、きっとcloud9で生成したhtmlもlambdaに送れるものと思うのだが・・・やり方が分からず、今回はcloud9でhtmlを作成する「だけ」としたいと思います。統合するのは次の2ファイルです。
main.html
<!DOCTYPE html> <html> Hello World!<br> <button id="btnOK" onclick="alert('OK!');">ok</button> </html>
main.js
window.addEventListener('load', () => { alert('HTML!'); });
ちなみに、あくまでベースはjsです。htmlに埋め込むのだけど、htmlはテンプレートなだけ。
onclick=xxx()みたいな形でhtmlからjsの関数を呼ぼうとしても、呼べません。
onclickを仕込みたければ、jsにaddeventlistnerを仕込みましょう。
同様に、bootstrapを読み込むのは、jsです。
package.jsonのdependencyに書いて、npm installで読み込んでしまいましょう。
【5】webpack.config.jsを書こう!
var HtmlWebpackPlugin = require('html-webpack-plugin'); var HtmlWebpackInlineSourcePlugin = require('html-webpack-inline-source-plugin'); const path = require('path'); module.exports = { plugins: [ new HtmlWebpackPlugin({ inject: true, inlineSource: '.(js|css)$', template: "./src/index.html" }), new HtmlWebpackInlineSourcePlugin(HtmlWebpackPlugin), ], entry: path.resolve("src", "index.js"), resolve: { extensions: ['.webpack.js', '.web.js', '.ts', '.tsx', '.js'], }, output: { filename: 'bundle.js', path: path.join(__dirname, 'dist') }, mode: 'development' };
実行するときはmode指定が必要です。
Webpack 4を使ってみたらビルド時に[WARNING]が出たので - Qiita
yarn run webpack --mode development
よくわからないが、元々のhtmlとjsはsrcフォルダ内に置いておきましょう。そこがデフォルトらしいです。
【6】エラーの回避
バージョンによっては上手くいかないらしく、package.jsonを書き直して、mpm installやってみると良いらしい。
Webpackにてhtml-webpack-inline-source-pluginを利用する - Qiita
{ "name": "name", "dependencies": { "html-webpack-inline-source-plugin": "1.0.0-beta.2", "html-webpack-plugin": "4.2.0", "ts-loader": "6.2.2", "typescript": "3.8.3", "webpack": "4.42.1", "webpack-cli": "3.3.11", "webpack-dev-server": "3.10.3" "amazon-chime-sdk-js": "*", "aws-sdk": "^2.675.0", "bootstrap": "^4.3.1", "jquery": "^3.4.1", } }
数日前の記事なので、とても参考になります!
・・・なるほど、分かってきたので、再度手順をまとめなおします!