Closed hirosejn closed 6 years ago
node -v
-> v6.10.3node -v
-> v8.9.3 🆗 jsdoc -c "C:\Users\A\Desktop\wbat\git\hirosejn\HJN\hjn_kashima_jsdoc_conf.json"
要対処Error: EPERM: operation not permitted, copyfile 'C:\Users\A\Desktop\wbat\JavaScript_GoogleDrive\jsdoc3\jsdoc3-jsdoc-dd905a2\templates\default_HJNcustom\static\fonts\OpenSans-Bold-webfont.eot' -> 'C:\Users\A\Desktop\wbat\git\hirosejn\HJN\jsdoc\fonts'
🆖
npm cache clean
-> 解消せず
node.js アンインストール v8.9.3 再インストール -> 解消せず
node.js アンインストール v6.10.3 インストール -> 復活 cd C:\Users\A\Desktop\wbat\JavaScript_kashima_201712
(PATHに追加)
※ フォルダ名にwebpackフォルダがあるとインストール時にエラーとなるnpm init -y
-> ./package.json 作成{ "scripts": { "build": "webpack" }, "devDependencies": { "webpack": "^3.10.0" } }
npm i -D webpack
-> webpack導入(./node_modules作成)npm i -D webpack webpack-dev-server
-> 修正を自動取り込みしWindows内にWebサーバを立てるnpm install html-loader —save-dev
-> HTMLをバンドルするnpm install css-loader —save-dev
npm install style-loader —save-dev
-> CSSをバンドルするnpm install url-loader —save-dev
-> 画像をbase64にしてバンドルするcd C:\Users\A\Desktop\wbat\JavaScript_kashima_201712
npm run build
npm rurn start
して、chrome(61以上)から http://localhost:8081/
にアクセス前提
ブラウザ(chrome 61[2017/8]以上)でバンドル前のソースでデバッグし、そのままwebpack(Node.js上)でバンドルし疎通確認
HTML のSCRIPTタグから importしJSの hello()を呼び出す
HTMLは、type="module" の指定がないとimportを予約語と認識しないので構文エラーとなる
ブラウザでは、Node.js の require を認識しないので import で記述
ブラウザではパスおよび拡張子 .js の指定が必須(Node.jsなら省略可能)
ブラウザでは、ファイルサーバ上のjavascriptのimportは、エラーとなるためWebサーバアクセス要(
Index_module.html:1 Access to Script at 'xxx.js' from origin 'null' has been blocked by CORS policy: Invalid response.
package.json
{
"scripts": {
"build": "webpack",
"start": "webpack-dev-server"
},
"devDependencies": {
"html-loader": "^0.5.1",
"webpack": "^3.10.0",
"webpack-dev-server": "^2.9.7"
}
}
webpack.config.js
const webpack = require('webpack');
module.exports = {
entry: `./src_x/main.js`, // メインとなるJavaScriptファイル(エントリーポイント)
output: { // ファイルの出力設定
path: `${__dirname}/dist_x`, // 出力ファイルのディレクトリ名
filename: 'bundle.js' // 出力ファイル名
},
module: {
loaders: [ // `-loader`は省略可能
{ test: /\.html$/, loader: 'html-loader' }, // htmlを読み込むローダー
{ test: /\.css$/, loaders: ['style-loader','css-loader'] }, // cssを読み込むローダー
{ test: /\.(jpg|png|gif)$/, loaders: 'url-loader' } // ファイルを読み込むローダー
]
},
devtool: 'source-map', // ソースマップを有効にする
plugins: [
new webpack.optimize.UglifyJsPlugin({ // バンドルしたJSをminifyする
sourceMap: true // minify時でもソースマップを利用する
})
],
devServer: { // ローカル開発用環境を立ち上げる
contentBase: './', // './src'と'./dist'の両方が見える場所
port: 8081 // ブラウザで http://localhost:8081/ でアクセスできるようになる
}
};
./src_x/index_original.html
<!doctype html>
<html lang="ja">
<head><meta charset="UTF-8"><title>index_html</title></head>
<body>
<p>バンドル前の開発用html、main.jsの処理を通常のhtmlで記述</p>
<p>loader指定(html,CSS,ファイル(画像))のimportは、ブラウザでは効かない(JSとみなしてエラーとなる)</p>
<div id='box'></div>
<link type="text/css" rel="stylesheet" href="./app.css">
<script>
var png = './image.png';
var imgPng = document.createElement('img');
imgPng.src = png;
document.getElementById('box').appendChild(imgPng);
</script>
<script type="module">
import {hello} from "./sub.js";
hello();
</script>
</body>
</html>
./src_x/index_bandle.html
<!doctype html>
<html lang="ja">
<head><meta charset="UTF-8"><title>index_html</title></head>
<body>
これが表示されたら、bundle.js 失敗
<script type="module" src="../dist_x/bundle.js"></script>
</body>
</html>
./src_x/main.js
// htmlの取込とDOMへ反映
import app_html from './app.html';
document.body.innerHTML = app_html;
//cssの取り込み
import css from './app.css';
//画像(ファイル)の取込とDOMへ反映
import png from './image.png';
var imgPng = document.createElement('img');
imgPng.src = png;
document.getElementById('box').appendChild(imgPng);
//JSの取込、JSのみネスト可
import {hello} from "./sub.js";
window.addEventListener("DOMContentLoaded",function(eve){
hello(); // 先頭JS関数を呼ぶ、htmlの表示よりJS(hello())が先に処理される
});
./src_x/app.html
<meta charset="UTF-8">
<div id='box'></div>
<p>css読込み:アンダーラインがあれば成功、画像読:画像があれば成功、JS読込:alertが表示されれば成功</p>
<p>bundle.jsを読込むscriptタグはhtmlのbodyにあることが必要(htmlのheadではDOM操作できない)</p>
<p>文字化けするときはmetaタグを指定する、BODYタグ内の指定で効く</p>
<p>type="module" の指定がないとimportを予約語と認識しないので構文エラーとなる</p>
<p>ブラウザではパスおよび拡張子 .js の指定が必須(webpackのみなら省略可能)</p>
<p>ブラウザ(chrome[60以上])では、ファイルサーバ上のjavascriptのimportは、以下のエラーとなるため、webサーバ経由でアクセス要</p>
<p>Index_module.html:1 Access to Script at 'xxx.js' from origin 'null' has been blocked by CORS policy: Invalid response. </p>
<p>loader指定(html,CSS,ファイル(画像))スクリプト内では、importは効かない(JSとみなしてエラーとなる)、HTML内のSCRIPTタグは効かない、LINKタグは読込まれる</p>
./src_x/app.css
p { border-bottom: 1px solid #ccc; }
./src_x/sub.js
export {hello}; // export文を使ってhello関数を定義する。
import {message1, message2} from './message.js';
function hello() { alert(message1() + message2()); }
./src_x/message.js
export {message1, message2}
function message1() { return "message1"; }
function message2() { return "message23"; }
インストール webpack 3入門(図解付き)
HTML,CSS,画像バンドル WebPackを使ってJavaScriptを効率的に書くチュートリアル【入門編】
C:\Users\A\Desktop\wbat\git\hirosejn\HJN
追加
システムのプロパティの 詳細設定タグ の [環境変数] cd C:\Users\A\Desktop\wbat\git\hirosejn\HJN
(PATHに追加)
※ フォルダ名にwebpackフォルダがあるとインストール時にエラーとなるので削除
※ githubに登録しているフォルダ
githubにwebpack本体が登録されないようにする場合は上位フォルダを指定
横並びだとソースディレクトリを指定できないnpm init -y
-> ./package.json 作成{ "scripts": { "build": "webpack" }, "devDependencies": { "webpack": "^3.10.0" } }
npm i -D webpack
-> webpack導入(14.4MB)(./node_modules作成)npm i -D webpack webpack-dev-server
-> 修正を自動取り込みしWindows内にWebサーバを立てる(計26.0MB)npm install html-loader —save-dev
-> HTMLをバンドルする(計28.8MB)npm install css-loader —save-dev
(計56.3MB)
npm install style-loader —save-dev
-> CSSをバンドルする(計56.3MB)npm install url-loader —save-dev
-> 画像をbase64にしてバンドルする(計56.3MB)npm install jsdoc --save-dev
-> 別目的(下記、jsdoc3復活)(計60.6MB)
{ "scripts": { "build": "webpack", "start": "webpack-dev-server" },
module.exports = { entry: `./sandbox/webpack/src_x/main.js`,
output: {
path: `${__dirname}/sandbox/webpack/dist_x`,
filename: 'bundle.js'
},
cd C:\Users\A\Desktop\wbat\git\hirosejn\HJN
npm run build
npm run start
して、chrome(61以上)から http://localhost:8081/
にアクセス
※ html更新時は自動更新されず、キャッシュが再利用されるため、再起動が必要レガシーシステム上のJavaScriptをモダンビルドにしていくwebpack利用実例 アロー関数が実装された ・・「thisの参照が関数定義時に決まる」が魅力的だが、ie11で使えないので見送り webpackで共有ライブラリを使う&作るビルド設定:externals ・・・ externals : import せずにhtmlで取込むJSファイルを指定する webpackでjQueryに依存したライブラリを含めてビルドする ・・・ plugins: [ new webpack.ProvidePlugin({ $: 'jquery' }) ] で$にjqueryを突っ込む方法
[x] ie11 で画面が表示されない 原因:ie11は、type="module" 指定した Githubissues.
対応方針
要件
参考
webpack入門 webpack3入門 webpackとは
おまけ
もう迷わない!人気JavaScriptフレームワーク、ライブラリー、ツール総まとめ 5000人調査でわかった!世界のフロントエンド開発者が使うツールはこれだ gulpとbabelとwebpackというフロント開発3銃士 今時のフロントエンド開発2017 ソースマップ