アカベコマイリ

HEAR NOTHING SEE NOTHING SAY NOTHING

gulp なしの Web フロントエンド開発

August 04, 2015開発CSS, ES6, JavaScript, Node, Stylus

Web  gulp 便 gulp  gulp  package.json  npm 


2015/11/4  babelify v7.2  babelyfy 7.2 (  Babel 6.x ) 調npm-scripts  Windows  watchify  -o 

2015/9/23  cpx  rimraf 

2015/9/15  Stylus styl  Source Maps  CSS 

2015/9/1  npm-run-all v1.2.8  npm-run-all  watchify  package.json  npm-scripts  npm-run-all  watchify  Source Maps 

2015/8/10  Windows  npm-run-all  concurrently 

2015/8/6   gulp  Web 





npm 

Grunt/Gulp

How to Use npm as a Build Tool





(一)package.json  npm 使

(二)AltJS  JavaScript 

(三)AltCSS  CSS 

(四) AltJS/AltCSS 

(五) 

(六) 

(七)Windows 


1  npm  CLI  Node  gulp npm 

2  ES63  Stylus CLI  Transpiler 

4  gulp 便

56 調 gulp  Web 

7 CLI OS X/Linux 


Mac  OS X Yosemite 10.10.4Windows  8.1 Node  v0.12.7 


 npm run README.md  LICENSE 
/
├ package.json
├ esdoc.json
├ src/
│ ├ index.html
│ ├ fonts/
│ ├ js/
│ └ stylus/
├ test/
├ dist/
├ esdoc/
└ node_modules/

各種ファイルとディレクトリについては以下を参照のこと。

名前 内容
package.json プロジェクト設定ファイル。
esdoc.json ESDoc 設定ファイル
src/ 開発用ディレクトリ。
src/index.html エントリー ポイントになる HTML ファイル。
src/fonts/ アイコン フォント置き場。
src/js/ JavaScript 置き場。コンパイル結果は src/ 直下へ出力。
src/stylus Stylus 置き場。コンパイル結果は src/ 直下へ出力。
test/ ユニット テスト置き場。
dist/ リリース用イメージ出力ディレクトリ。動的生成される。
esdoc/ コード ドキュメント出力ディレクトリ。動的生成される。
node_modules/ npm ディレクトリ。動的生成される。

JavaScript コンパイルとファイル監視


JavaScript  BrowserifyES6  ES5  babelify Source Maps  exorcist  watchify 
{
  "scripts": {
    "build:js": "browserify -t babelify ./src/js/App.js -d | exorcist ./src/bundle.js.map > ./src/bundle.js",
    "watch:js": "watchify -v -t babelify ./src/js/App.js -o \"exorcist ./src/bundle.js.map > ./src/bundle.js\" -d",
    "release:js": "browserify -t babelify ./src/js/App.js | uglifyjs > ./dist/bundle.js"
  }
}

build:js  JavaScript  Source Maps 

watch:js  Ctrl + C JavaScript -v watchify 
$ npm run watch:js

> front-end-starter@1.0.0 watch:js ../examples-web-app/front-end-starter
> watchify -v -t babelify ./src/js/App.js -o "exorcist ./src/bundle.js.map > ./src/bundle.js" -d

10295 bytes written to exorcist ./src/bundle.js.map > ./src/bundle.js (1.04 seconds)

release:js  JavaScript uglify-js  Source Maps  dist 

2015/11/5 


babelify 7.2 ( Babel 6.x )  ES6  React JSX 
$ npm i -D babel-preset-es2015 babel-preset-react

以下のように --presets で指定する必要がある。

{
  "scripts": {
    "build:js": "browserify -t [ babelify --presets [ es2015 react ] ] ./src/js/App.js -d | exorcist ./src/bundle.js.map > ./src/bundle.js",
    "watch:js": "watchify -v -t [ babelify --presets [ es2015 react ] ] ./src/js/App.js -o \"exorcist ./src/bundle.js.map > ./src/bundle.js\" -d",
    "release:js": "browserify -t [ babelify --presets [ es2015 react ] ] ./src/js/App.js | uglifyjs > ./dist/bundle.js"
  }
}

 watchify  -o  Windows  Windows 

Windows 


 watchify 

watch:js  Windows watchify  Source Maps  -o  exorcist 

watchify  #16 External source maps and other options.  Windows README 


The -o option can be a file or a shell command (not available on Windows) that receives piped input: readme.markdown


 Windows  Source Maps 
{
  "scripts": {
    "watch:js": "watchify -v -t babelify ./src/js/App.js -o ./src/bundle.js -d"
  }
}

Source Maps の有無は -d オプションで切り替え可能。

CSS コンパイルとファイル監視

2015/9/15 版

Stylus CLI 自体にもファイル監視機能があること、styl ファイルを追加した時に Source Maps を参照できなくなる問題があることからスクリプトを以下のように修正。

{
  "scripts": {
    "build:css": "stylus -c ./src/stylus/App.styl -o ./src/bundle.css -m --sourcemap-root ./stylus",
    "watch:css": "stylus -c -w ./src/stylus/App.styl -o ./src/bundle.css -m --sourcemap-root ./stylus",
    "release:css": "stylus -c ./src/stylus/App.styl -o ./dist/bundle.css"
  }
}

Stylus 使 watch  Windows 


 AltCSS  Stylus  npm stylus  CLI 使 watch 
{
  "scripts": {
    "build:css": "stylus -c ./src/stylus/App.styl -o ./src/bundle.css -m",
    "watch:css": "watch \"npm run build:css\" ./src/stylus/",
    "release:css": "stylus -c ./src/stylus/App.styl -o ./dist/bundle.css"
  }
}

build:css  CSS -c  Minify  -m  Source Maps 

watch:css watch  gulp.watch  build:css 

release:css Source Maps  dist 

Windows 


watch:css  watch JSON  Windows 


Web 


Web   Web  Chrome   Ajax  Web Storage 

 Web  Web  browser-sync 
{
  "scripts": {
    "server": "browser-sync start --server src"
  }
}

server を実行すると http://localhost:3000src/ をホスト。ここへアクセスした状態なら Chrome のローカル ファイルに対する機能抑止を回避できる。

localhost 部分を Web サーバーを実行しているマシンの IP アドレスにすることで同一ネットワーク上の他の端末からもアクセス可能。これはスマートフォンやタブレット端末による動作検証に役立つ。コマンド実行時に URL を教えてくれるのも親切だ。

$ npm run server

> front-end-starter@1.0.0 server ../examples-web-app/front-end-starter
> browser-sync start --server src

[BS] Access URLs:
 ------------------------------------
       Local: http://localhost:3000
    External: http://XXX.XXX.XXX.XXX:3000
 ------------------------------------
          UI: http://localhost:3001
 UI External: http://XXX.XXX.XXX.XXX:3001
 ------------------------------------
[BS] Serving files from: src

browser-sync  Web  Web 

Windows 




JavaScript  CSS  Web 
{
  "scripts": {
    "watch": "npm run watch:css & npm run watch:js & npm run server",
    "start": "npm run watch"
  }
}

watch  start  npm run  run  npm start 

 UNIX 
連結方法 内容
one & two 並列実行。one の実行を待たずに two が起動される。
one && two 直列実行。one の実行が成功した後に two が起動される。成否をチェックが不要なら ; で連結する。
one | two 直列実行。one の出力を受け取り two が起動される。

開発用コマンドは依存関係がないため並列実行の & で連結している。

Windows 対応 2015/9/1 版

npm-run-all あれば、コマンドの直列・並列実行を OS 非依存で実現できる。v1.2.6 時点では watchify の終了に失敗する問題があったものの最新の v1.2.8 では解決されているため、複数コマンドの連結はこれで統一するのがよいだろう。

"scripts": {
  "start": "npm run watch",
  "watch:css": "watch \"npm run build:css\" ./src/stylus/",
  "watch:js": "watchify -v -t babelify ./src/js/App.js -o \"exorcist ./src/bundle.js.map > ./src/bundle.js\" -d",
  "watch:server": "browser-sync start --server src",
  "watch": "npm-run-all -p watch:css watch:js watch:server"
}

Windows 対応 2015/8/10 版

npm-run-all と concurrently を試すで調査した結果 concurrently で対応できた。連結だけ引用すると以下のようになる。詳細は当該記事を参照のこと。

{
  "scripts": {
    "watch:server": "browser-sync start --server src",
    "watch:js": "watchify -v -t babelify ./src/js/App.js -o ./src/bundle.js -d",
    "watch:css": "watch \"npm run build:css\" ./src/stylus/",
    "watch": "concurrent \"npm run watch:css\" \"npm run watch:js\" \"npm run watch:server\""
  }
}

Windows 対応 2015/8/5 版


 watch:css Windows 8.1   PowerShellSourceTree  MinGW 

使 &&  watch UNIX  Cygwin  win-bash  package.json  npm 

 3 3


2015/8/8   mysticatea  npm-run-all   Web  Ctrl + C watch  ERROR: watch:js: None-Zero Exit(null);  watch:js   npm-run-all  watchify  ( process.exit )  npm-run-all 

 


  ES6 
{
  "scripts": {
    "test": "mocha --compilers js:espower-babel/guess test/**/*.test.js"
  }
}

test  start  run  npm test 

 test/**/*.test.js   mocha 

  .test 便 Sublime Text 

Windows 



 


  ESDoc  
{
  "scripts": {
    "esdoc": "esdoc -c esdoc.json"
  }
}

コマンドを実行すると esdoc/ 内へコード ドキュメントが出力される。リリース用イメージ生成に含めるか迷ったが、プロジェクトがバージョン管理されていれば好きなタイミングで出力できるので単体コマンドにしておいたほうがよいと判断。

Windows 対応

不要。

リリース用イメージ生成

Web フロントエンド部分をデプロイするためのイメージ生成。コマンド定義は以下。

{
  "scripts": {
    "release:clean": "trash ./dist",
    "release:mkdir": "mkdirp ./dist && npm run release:clean && mkdirp ./dist",
    "release:copyfiles": "copyfiles -f ./src/*.html ./dist",
    "release:copydirs": "ncp ./src/fonts ./dist/fonts",
    "release:copy": "npm run release:copyfiles && npm run release:copydirs",
    "release": "npm run release:mkdir && npm run release:copy && npm run release:css && npm run release:js"
  }
}

release:clean gulp  del  CLI  trash del  CLI 

release:mkdir mkdirp gulp  del  gulp.src/dest  trash  mkdirp  mkdirptrashmkdirp 

release:copyfiles  copyfiles src/  index.html  JavaScript  CSS  ( Source Maps ) 

release:copydirs  ncp 

release:copy  release 

2015/9/23 


cpx  rimraf Windows 
{
  "scripts": {
    "release:css": "stylus -c ./src/stylus/App.styl -o ./dist/bundle.css",
    "release:js": "browserify -t babelify ./src/js/App.js | uglifyjs > ./dist/bundle.js",
    "release:clean": "rimraf ./dist",
    "release:copy": "cpx \"./src/**/{*.html,*.eot,*.svg,*.ttf,*.woff,package.json}\" ./dist",
    "release": "npm-run-all -s release:clean release:copy -p release:css release:js"
  }
}

Windows 対応 2015/9/1


Windows  &&  npm-run-all OS
{
  "scripts": {
    "release:css": "stylus -c ./src/stylus/App.styl -o ./dist/bundle.css",
    "release:js": "browserify -t babelify ./src/js/App.js | uglifyjs > ./dist/bundle.js",
    "release:clean": "trash ./dist",
    "release:mkdir": "mkdirp ./dist",
    "release:copyfiles": "copyfiles -f ./src/*.html ./dist",
    "release:copydirs": "ncp ./src/fonts ./dist/fonts",
    "release": "npm-run-all -s release:mkdir release:clean release:mkdir  release:copyfiles release:copydirs -p release:css release:js"
  }
}

-s -p 

Windows 




 gulp  src/dest 使glob  CLI  npm 

 CLI  npm  README  CLI 

gulp  npm  browser-sync 

Windows  Node  Windows  Windows 

 gulp  Web  npm 

 ~~v1.0.2  Windows  v1.0.3  npm-run-all v1.2.8 v1.0.4  CSS  Windows v1.0.5 ~~

Comments from WordPress

  • Sanemat Sanemat 2015-08-05T04:54:06Z

    CLI :)  https://github.com/pandawing/awesome-nodejs-cross-platform-cli/



    アカベコ  2015-08-05T10:11:16Z





    mysticatea mysticatea 2015-08-06T07:27:18Z

     npm-run-all 

    https://www.npmjs.com/package/npm-run-all



    アカベコ  2015-08-06T11:33:11Z

    npm-run-all  watch 



    アカベコ  2015-08-08T11:37:53Z

    npm-run-all Ctrl + C  ERROR: watch:js: None-Zero Exit(null); 調
Copyright © 2009 - 2023 akabeko.me All Rights Reserved.