Gulp 樣板和建置系統。
包括以下工具、任務和工作流程:
<symbol>
和<use>
標籤的 SVG 圖示精靈正在尋找 SilverStripe 版本?看這裡。
Gulp-plate 依賴以下技術:
[1] 建議透過nvm(Node Version Manager)安裝node。
開始使用:
$ git clone https://github.com/arillo/gulp-plate myProject
$ cd myProject
$ rm -r .git # Remove the link to the git repo
$ yarn # Install dependencies
# Equivalent
$ yarn run build
執行預設任務並在dist
資料夾中產生網站的開發版本。
# Equivalent
$ yarn start
$ yarn run watch
運行預設任務一次,啟動伺服器並觀察檔案變更。
# Equivalent
$ yarn run prod
設定NODE_ENV='production'
並透過壓縮 js、css 和 html 產生網站的生產版本。這是伺服器上應該存在的資料夾。
如果您想要執行任何其他 gulp 任務,只需將任務名稱附加到 build /gulp 命令中:
# Equivalent
$ yarn run build sprite
$ yarn run b sprite
$ yarn run gulp sprite
$ yarn run g sprite
重要的:
每次執行build/watch/prod時dist
目錄都會被刪除。不要在dist
目錄中進行任何更改。
myProject/
gulpfile.js/ # gulp tasks
src/
icons/ # SVG files to be included in he the sprite
images/ # other images
js/ # js code
sass/ # Sass code, SCSS and Sass indented syntax possible
html/ # html templates
data/ # data in json format
layouts/ # reusable layout templates
macros/ # Nunjucks macros
shared/ # reusable snippets
所有路徑和外掛設定都已抽象化到一個集中檔案: ./gulpfile.js/config.js
。根據項目的結構和需求調整路徑和設定。
精靈在./dist/images/
中建立一個名為sprite.svg
的映像。它也會在./src/sass/base/
中建立一個名為: _sprite.scss
的 Sass 檔。
產生的 Sass 檔案包含有關精靈圖示的有用信息,例如每個圖示的尺寸。每次新增、刪除或變更圖示時,檔案都會更改,請勿手動編輯。您可以透過變更./gulpfile.js/tpl/_sprite.scss
中的範本來變更檔案。
從來源目錄移動靜態資源而不進行轉換,例如字體檔案。將src
和dest
路徑加入config.js
中的static
陣列中
模板使用 Nunjucks。有關如何使用它們的更多信息,請參閱文檔。
預設使用 Sass 縮排語法。主Sass檔需要有.sass
副檔名,否則編譯器會失敗。部分可以是.sass
和.scss
。
若要在 css 中包含第三方樣式,請將它們包含在main.sass
檔案中:
// main.sass
@import url( ' ../../node_modules/normalize.css/normalize.css ' ) ;
然後 postcss 外掛程式將內聯保留來源映射的檔案。 Sass編譯後。
請注意,Sass 會將@import url(...)
語句移到產生的 CSS 檔案的頂部,因此無論包含位置為何,這些樣式將始終包含在檔案的頂部。
在撰寫本文時, sass-lint
在遇到空選擇器時會失敗。這是一個錯誤,可以透過在空選擇器後面加上縮排註解//
來防止:
.mySelector
//
.mySelector_child
text-align : center
./gulpfile.js/config.js
檔案包含完整的 webpack 設定(請參閱js
變數)。請根據需要隨意更改。請記住, babel-loader
應該始終存在,因為eslint
將依賴它。
根據您正在運行的任務,配置將略有變更。使用 watch 任務時,Javascript 編譯將在記憶體中進行,因此不會將任何檔案寫入磁碟( ./dist/js/
將為空),並且webpack-hot-middleware/client
將被注入到所有套件中以便即時重新加載工作。在建構生產環境時,使用webpack.optimize.UglifyJsPlugin
進行縮小。檢視./gulpfile.js/util/getWebpackConfig.js
以準確了解發生的情況並根據需要進行更改。
以下是一些幫助您啟動和運行的有用秘訣:
// gulpfile.js/config.js
const js = {
resolve : {
extensions : [ '.js' ] ,
alias : {
// Path relative to `context`
myModule : './myModule/myModule.js' ,
} ,
} ,
} ;
// src/js/some-file.js
import myModule from 'myModule' ;
myModule ( ) ;
文件:https://webpack.js.org/configuration/resolve/#resolve-alias
// gulpfile.js/config.js
const webpack = require ( 'webpack' ) ;
//...
const js = {
plugins : [
// Make jQuery global, expected by the plugin.
new webpack . ProvidePlugin ( {
'window.jQuery' : 'jquery' ,
} ) ,
] ,
//...
resolve : {
// Add extensions to prevent linting errors.
extensions : [ '.js' , '.json' ] ,
// Path from `node_modules`, where `myModule` is the module name.
alias : {
myModule : 'myModule/dist/myModule.js' ,
} ,
} ,
} ;
// src/js/main.js
import $ from 'jquery' ;
import 'myModule' ;
$ ( '.js-selector' ) . myModule ( ) ;
// gulpfile.js/config.js
const js = {
//...
resolve : {
// Add extensions to prevent linting errors.
extensions : [ '.js' , '.json' ] ,
// Path from `node_modules`, where `myModule` is the module name.
alias : {
myModule : 'myModule/dist/myModule.js' ,
} ,
} ,
module : {
rules : [
// ...
{
include : require . resolve ( 'myModule/dist/myModule.js' ) ,
loader : 'exports-loader?MyModule' ,
} ,
] ,
} ,
} ;
// src/js/main.js
import $ from 'jquery' ;
import MyModule from 'myModule' ;
const myInstance = new MyModule ( ) ;
文件:https://webpack.js.org/guides/shimming/
若要建立多個捆綁包,請將整體新增至entry
// gulpfile.js/config.js
const js = {
// ...
entry : {
main : [ './main.js' ] ,
other : [ './someFile.js' , './sotherOtherFile.js' ] ,
} ,
// ...
} ;
這將產生兩個套件: main.js
和other.js
。
如果您這樣做,產生另一個包含所有共享供應商代碼的套件可能是個好主意:
// gulpfile.js/config.js
const webpack = require ( 'webpack' ) ;
//...
const js = {
// ...
entry : {
main : [ './main.js' ] ,
other : [ './someFile.js' , './sotherOtherFile.js' ] ,
// List vendor modules here:
vendor : [ 'jquery' , 'svg4everybody' ] ,
} ,
// ...
plugins : [
new webpack . optimize . CommonsChunkPlugin ( {
name : 'vendor' , // Specify the common bundle's name
} ) ,
] ,
// ...
} ;
文件:https://webpack.js.org/guides/code-splitting-libraries/
Gulp-plate 是基於 https://github.com/greypants/gulp-starter