Это сообщение в блоге является продолжением более раннего сообщения о том, как создать действие zip с помощью Whisk Deploy.

OpenWhisk предоставляет возможность создавать действия с использованием архива .zip, который может содержать любое количество файлов действий, включая все зависимости. Whisk Deploy поддерживает указание function, указывающего на каталог с файлами действий для создания .zip архива из всего содержимого каталога, а затем создания действия zip.

Уровень файла Включить

Недавно мы представили функцию в Whisk Deploy, чтобы указать include эквивалент парадигмы программирования import, например, несколько действий, ссылающихся на общую библиотеку, например:

$ cd actions/
$ ls -1 ./
common/
greeting1/
greeting2/
manifest.yaml 
$ ls -1 common/
utils.js
$ ls -1 greeting1/
index.js
package.json
$ ls -1 greeting2/
index.js
package.json

Здесь файл действия index.js под greeting1/ и файл действия index.js подgreeting2/ относится к utils.js из common/.

index.js в разделе действия / приветствие1 /:

index.js в разделе actions / welcome2 /:

manifest.yaml:

include принимает список файлов / каталогов, которые необходимо включить в действие. Каждый список элементов может иметь source и / или destination, например:

include:
    - [source]
    - [source, destination]

Примечание. (1) source считается относительным путем к тому месту, где находится manifest.yaml файл. destination считается относительным путем к каталогу действия, то есть actions/greeting1 и actions/greeting2 в следующем примере. (2) Если destination не указан, он считается таким же, как source.

include может содержать разные комбинации source и destination:

  • include с source:
include:
    - [actions/common/utils.js]

В этой спецификации utils.js будет скопирован в actions/greeting/actions/common/utils.js, и на него можно ссылаться из index.js с помощью:

var utils = require('./actions/common/utils.js')
  • include с переименованием:
include:
    - ["actions/common/utils.js", "./common/myUtils.js"]

В этой спецификации utils.js будет скопирован как actions/greeting/common/myUtils.js, и на него можно ссылаться из index.js с помощью:

var utils = require('./common/myUtils.js')
  • include с другим путем:
include:
    - ["actions/common/utils.js", "./common/utility/utils.js"]

В этой спецификации utils.js будет скопирован как actions/greeting/common/utility/utils.js, и на него можно ссылаться из index.js с помощью:

var utils = require('./common/utility/utils.js')
  • include с диким символом *:
include:
    - ["actions/common/*.js", "./common/"]

В соответствии с этой спецификацией utils.js и любой другой файл с расширением .js будет скопирован под actions/greeting/common/, и на него можно будет ссылаться из index.js с помощью:

var utils = require('./common/utils.js')

Уровень каталога Включить

include также поддерживает указание каталога, который рекурсивно копируется в указанное место назначения перед включением его в архив, например, libs имеет список библиотек, на которые указывает index.js в greeting3/:

$ cd actions/
$ ls -1
libs/
greeting3/
manifest.yaml
$ ls -1 libs/
lib1/
lib2/
lib3/
$ ls -1 libs/lib1/
utils.js
$ ls -1 libs/lib2/
utils.js
$ ls -1 libs/lib3/
utils.js
$ ls -1 greeting3/
index.js
package.json

index.js в разделе действия / приветствие3 /:

manifest.yaml в разделе действия /:

Здесь весь каталог libs рекурсивно копируется в actions/greeting3/libs/.

  • include с диким символом *:

Пример 1:

include:
    - ["actions/libs/*/utils.js", "libs/"]

В соответствии с этой спецификацией utils.js файл в любом каталоге в пределах libs будет скопирован в libs/ и на него можно будет ссылаться из index.js, как в приведенном выше примере:

var lib1 = require('./libs/lib1/utils.js')
var lib2 = require('./libs/lib2/utils.js')
var lib3 = require('./libs/lib3/utils.js')

Пример 2:

include:
    - ["actions/*/*/utils.js"]

В соответствии с этой спецификацией файл utils.js в двух каталогах в actions будет скопирован в actions/, и на него можно будет ссылаться из index.js с помощью:

var lib1 = require('./actions/libs/lib1/utils.js')
var lib2 = require('./actions/libs/lib2/utils.js')
var lib3 = require('./actions/libs/lib3/utils.js')

Пример 3:

include:
    - ["actions/*/*/utils.js", "actions/"]

В соответствии с этой спецификацией utils.js файл в двух каталогах в actions будет скопирован в actions/, и на него можно будет ссылаться из index.js с помощью:

var lib1 = require('./actions/libs/lib1/utils.js')
var lib2 = require('./actions/libs/lib2/utils.js')
var lib3 = require('./actions/libs/lib3/utils.js')

Исключать

exclude можно указать как список файлов или каталогов с подстановочными знаками *:

exclude:
    - actions/common/*.js
    - actions/libs/*/utils.js

Вот очень частое использование комбинации include и exclude:

manifest.yaml:

Удачи!