自動構築
4829 ワード
process.env.NODE_ENV環境変数
Gulp
フロントエンド開発プロセスを最適化するツール.ストリームに基づいてgulp.srcはglob定義パスを使用してマッチングファイルをpipeストリーム形式でgulpプラグインにインポート処理済みgulp.destによる指定ディレクトリへの書き込み
task非同期メソッド戻り:1.return pipe 2.return promise 3.callback
エントリファイル:gulpfile.js
共通プラグイン:browserSync gulp gulp-load-plugins gulp-inject js,css注入html gulp-useref htmlに導入されたすべてのファイル、ブロック定義でマージgulp-revファイルを定義するバージョン番号gulp-revReplace追加バージョン番号のファイル置換index.html参照ファイルgulp-uglify圧縮JS gulp-csso圧縮CSS gulp-minifyHtml圧縮Html圧縮Html gulp-css-spriter雪碧図gulp-sassコンパイルsassファイルcss gulp-concatマージjs gulp-sequence browserify
gulp taskNameの実行
Gulp+Browserify CommonJs仕様:モジュールロード同期、NodeもCommonJS仕様を採用各ファイルはモジュールであり、独自の役割ドメインを持つ
しかし、Browserifyの代わりにES 6モジュール構文を使用します.
Webpack
モジュール化されたソリューション.プロジェクト構造を解析し、JavaScriptモジュールや他のブラウザで直接拡張できない言語(Scss,Type Script)などを見つけ、ブラウザで使用するために適切なフォーマットに変換してパッケージ化する
devtoolノードを構成Source Mapsを生成devserverコンポーネントを構成し、ブラウザのリスニングコードの変更を実現
Webpack-dev-server(別途インストールする必要がある)小型Node.js Expressサーバ、Webpack-dev-middlewareサービスwebpackパッケージwebpack-dev-server静的サーバ、expressのように開発環境の2種類のリフレッシュモード:iframe mode、inline mode起動:webpack-dev-server-open Hot Module Replacement(HMR)はコンポーネントコードの修正を許可した後、自動的にリアルタイムプレビューをリフレッシュし、ページリロードではなく部分のみ更新
Loadersは外部スクリプトまたはツールを呼び出し、異なるフォーマットのファイル処理を実現する
PluginsはWebpack機能を拡張して、全体の構築過程の中で有効なLoadersはパッケージ構築過程の中でソースファイルを処理するために使用した(JSX,Scss.)、プラグインは直接単一ファイルを操作しないで、直接全体の構築過程に対して作用する
共通プラグインBannerPluginパッケージング後のファイルに著作権HtmlWebpackPlugin簡単なindex.htmlテンプレートに基づいて、パッケージング後のJSファイルを自動的に参照する新しいindex.html OccuenceOrderPluginを生成し、コンポーネントにID UglifyJsPlugin圧縮JS ExtractTextPlugin分離CSSとJSファイルCommonsChunkPlugin抽出共通js
Babelコンパイルjavascriptのプラットフォーム(ES 6,ES 7,JSX)プロファイル.babelrc
実行生成package.json実行npm init package.jsonで「scripts」{「pc-prod」:「webpack--config webpack.prod.config.js--display-error-details」}npm run pc-prod
AMD仕様とCommonJS仕様
CommonJs仕様ロードモジュールは同期されており、ロードが完了した場合にのみ、後の操作を実行します.AMD仕様異ロードモジュールは非同期です.コールバック関数を指定し、defined定義モジュールを使用できます.
Gulp
フロントエンド開発プロセスを最適化するツール.ストリームに基づいてgulp.srcはglob定義パスを使用してマッチングファイルをpipeストリーム形式でgulpプラグインにインポート処理済みgulp.destによる指定ディレクトリへの書き込み
task非同期メソッド戻り:1.return pipe 2.return promise 3.callback
gulp.task('scripts', [], function () {
return gulp.src(path.join(config.paths.www, 'js/**/*.js'))
// angularJs annotate
.pipe(glp.ngAnnotate())
// tmp/scripts
.pipe(gulp.dest(path.join(config.paths.tmp, '/scripts')));
});
//
var borowserSync = require('browser-sync').create();
gulp.task('sass', function(){
return gulp.src('sass/**/*.js')
// ,
.pipe(browserSync.stream())
// ,
.pipe(browserSync.reload({stream:true}));
});
//
function browserSyncInit(baseDir, browser) {
glp.browserSync.init({
startPath: '/',
server: './',
browser: browser,
port: 8000,
ui: {
port: 8001
},
notify: false
});
};
gulp.watch('sass/**/*.scss', ['sass']);
//
gulp.watch('*.html').on('change', browserSync.reload);
エントリファイル:gulpfile.js
共通プラグイン:browserSync gulp gulp-load-plugins gulp-inject js,css注入html gulp-useref htmlに導入されたすべてのファイル、ブロック定義でマージgulp-revファイルを定義するバージョン番号gulp-revReplace追加バージョン番号のファイル置換index.html参照ファイルgulp-uglify圧縮JS gulp-csso圧縮CSS gulp-minifyHtml圧縮Html圧縮Html gulp-css-spriter雪碧図gulp-sassコンパイルsassファイルcss gulp-concatマージjs gulp-sequence browserify
gulp taskNameの実行
Gulp+Browserify CommonJs仕様:モジュールロード同期、NodeもCommonJS仕様を採用各ファイルはモジュールであり、独自の役割ドメインを持つ
module.exports.fun = function(){}
//exports module.exports
// exports = function(){} exports module.exports
exports.fun = function()
require('./fun')
しかし、Browserifyの代わりにES 6モジュール構文を使用します.
Webpack
モジュール化されたソリューション.プロジェクト構造を解析し、JavaScriptモジュールや他のブラウザで直接拡張できない言語(Scss,Type Script)などを見つけ、ブラウザで使用するために適切なフォーマットに変換してパッケージ化する
devtoolノードを構成Source Mapsを生成devserverコンポーネントを構成し、ブラウザのリスニングコードの変更を実現
Webpack-dev-server(別途インストールする必要がある)小型Node.js Expressサーバ、Webpack-dev-middlewareサービスwebpackパッケージwebpack-dev-server静的サーバ、expressのように開発環境の2種類のリフレッシュモード:iframe mode、inline mode起動:webpack-dev-server-open Hot Module Replacement(HMR)はコンポーネントコードの修正を許可した後、自動的にリアルタイムプレビューをリフレッシュし、ページリロードではなく部分のみ更新
Loadersは外部スクリプトまたはツールを呼び出し、異なるフォーマットのファイル処理を実現する
PluginsはWebpack機能を拡張して、全体の構築過程の中で有効なLoadersはパッケージ構築過程の中でソースファイルを処理するために使用した(JSX,Scss.)、プラグインは直接単一ファイルを操作しないで、直接全体の構築過程に対して作用する
共通プラグインBannerPluginパッケージング後のファイルに著作権HtmlWebpackPlugin簡単なindex.htmlテンプレートに基づいて、パッケージング後のJSファイルを自動的に参照する新しいindex.html OccuenceOrderPluginを生成し、コンポーネントにID UglifyJsPlugin圧縮JS ExtractTextPlugin分離CSSとJSファイルCommonsChunkPlugin抽出共通js
Babelコンパイルjavascriptのプラットフォーム(ES 6,ES 7,JSX)プロファイル.babelrc
module.exports = {
entry: __dirname + "/app/main.js",//
output: {
path: __dirname + "/build",//
filename: "bundle-[hash].js"//
},
devtool: 'eval-source-map',
devServer: {
contentBase: "./public",//
historyApiFallback: true,//
inline: true
},
module: {
rules: [
{
test: /(\.jsx|\.js)$/,
use: {
loader: "babel-loader"
},
exclude: /node_modules/
},
{
test:/\.css$/,
use:[
{loader:"style-loader"}
{loader:"css-loader", options:{modules:true}}
]
}
]
},
plugins: [
new webpack.BannerPlugin(' , '),
new HtmlWebpackPlugin({
template: __dirname + "/app/index.tmpl.html"
}),
new webpack.optimize.OccurrenceOrderPlugin(),
new webpack.optimize.UglifyJsPlugin(),
new ExtractTextPlugin("style.css")
]
};
//
...
entry:{
'about':'../about.js',
'product':'../product.js',
vendor:['jquery', 'react']}
plugins:[
new HtmlWebpackPlugin({
favicon:'', filename:'../views/about.html',
template:'../about.html',
chunks:['vendor', 'about']
}),
new HtmlWebPackPlugin({...})
]
}
実行生成package.json実行npm init package.jsonで「scripts」{「pc-prod」:「webpack--config webpack.prod.config.js--display-error-details」}npm run pc-prod
AMD仕様とCommonJS仕様
CommonJs仕様ロードモジュールは同期されており、ロードが完了した場合にのみ、後の操作を実行します.AMD仕様異ロードモジュールは非同期です.コールバック関数を指定し、defined定義モジュールを使用できます.