Это сообщение в блоге является продолжением более раннего сообщения о том, как создать действие 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:
Удачи!