@cybozu/duck (英语)
与Google关闭编译器/Library/Templates一起服务并构建了应用程序. 替代 爱人。 。 。 .
安装
$ npm i -D @cybozu/duck
使用量
duck <command>
Commands:
duck serve [entryConfigDir] Start dev server
duck build [entryConfigDir] Build Soy, deps.js and JS
duck build:js [entryConfigDir] Compile JS files
duck build:soy Compile Soy templates
duck build:deps Generate deps.js
duck clean:soy Remove all compiled .soy.js
duck clean:deps Remove generated deps.js
duck completion Generate completion script for bash/zsh
Options:
-v, --version Show version number [boolean]
-h, --help Show help [boolean]
CLI options overwrite config file
duck serve
duck serve [entryConfigDir]
Start dev server
Options:
--inputsRoot A root directory to serve [string]
--closureLibraryDir A root directory of Closure Library [string]
--depsJs A path to deps.js to save and load [string]
--depsWorkers The number of workers to analyze deps [number] [default: 4]
--config A path to duck.config.js, the extension can be ommited [string]
--nonTTY, --noTTY, -n Output in nonTTY mode [boolean] [default: false]
--skipInitialBuild, -s Skip initial building of Soy and deps.js [boolean] [default: false]
--port A port number to listen [number] [default: 9810]
--host A host to listen [string] [default: "localhost"]
-v, --version Show version number [boolean]
-h, --help Show help [boolean]
duck build
duck build [entryConfigDir]
Build Soy, deps.js and JS
Options:
--entryConfigs, -e Entry config files (this option ignores entryConfigDir) [array]
--closureLibraryDir A root directory of Closure Library [string]
--config A path to duck.config.js, the extension can be ommited [string]
--concurrency, -c Concurrency limit of Closure Compiler [number]
--batch Build in batch mode (on AWS or local for debug)[choices: "aws", "local"]
--reporters Test reporters ("text", "xunit" or "json") [array] [default: ["text"]]
--reporterOptions Test reporter options
--printConfig, -p Print effective configs for compilers [boolean] [default: false]
--depsJs A path to deps.js to save and load [string]
--nonTTY, --noTTY, -n Output in nonTTY mode [boolean] [default: false]
--depsWorkers The number of workers to analyze deps [number] [default: 4]
--skipInitialBuild, -s Skip initial building of Soy and deps.js [boolean] [default: false]
--soyJarPath A path to Soy.jar [string]
--soyFileRoots Root directories of soy files [array]
--soyClasspaths Classpaths for Closure Templates [array]
--watch, -w Re-compile incrementally when files change [boolean] [default: false]
-v, --version Show version number [boolean]
-h, --help Show help [boolean]
duck.config.js
创建配置文件 duck.config.js 或者说 duck.config.json 在您的项目根上.
从位置设定每个路径为相对路径 duck.config.js。 。 。 .
module.exports = {
/**
* Common settings
*/
// (Required) A path to Closure Library direcotry
closureLibraryDir: "node_modules/google-closure-library",
// (Required) A directory where entry config JSONs are stored flat
entryConfigDir: "entry-configs",
/**
* Generating and loading deps.js
*/
// A path to deps.js to save and load in build and serve commands
depsJs: "build/deps.js",
// Directories ignored when building deps.js
depsJsIgnoreDirs: ["src/third_party"],
// The number of workers to build deps.js. Node v10 uses processes and node v12+ uses threads. (default: 4)
depsWorkers: 2,
/**
* Building Soy
*/
// (Required) A path to Closure Templates JAR
soyJarPath: "lib/closure-templates.jar",
// (Required) Directories where Closure Templates .soy files are stored
soyFileRoots: ["src/js"],
// Classpaths for Closure Templates plugins
soyClasspaths: ["lib/plugin.jar"],
// Send srcs to closure-templates as relative paths from this.
// Also change cwd to this and run closure-templates. (default: undefined)
soySrcsRelativeFrom: "src",
// Options for Closure Templates CLI
soyOptions: {
outputDirectory: "src/js/soy",
},
/**
* Compiling JavaScript
*/
// Concurrency of Closure Compiler (default: 1,000 if AWS batch mode, otherwise 1)
concurrency: 4,
// Build in batch mode with faast.js on "aws" for production or "local" for debug (default: undefined)
batch: "aws",
// Custom Closure Compiler package used in AWS batch mode (default: undefined)
batchAwsCustomCompiler: {
name: "my-custom-closure-compiler",
version: "^1.0.0",
},
// Max chunk size in bytes for spliting return value from faastjs module (default: 204,800 (200kb))
batchMaxChunkSize?: number;
// Options for faast.js in batch mode. See https://faastjs.org/docs/api/faastjs.awsoptions
batchOptions: {},
// Reporters (choose from "json", "text" or "xunit")
reporters: ["text", "xunit"],
// Options for each test reporter
reporterOptions: {
text: {
// Output errors to stderr or not
stderr: false,
// A directory where reporters output
outputDir: "test-results/text",
},
xunit: {},
},
/**
* Serve
*/
// (Required) A root directory scanned to build deps.js and delivered as static assets
inputsRoot: "src/inputs",
// Hostname for serve command (default: 0.0.0.0)
host: "localhost",
// Port number for serve command (default: 9810)
port: 1234,
// Use HTTP/2 in serve command (deafult: false)
http2: true,
// Settings for HTTPS (HTTP/2) (default: not specified, HTTP is used)
https: {
// A path to a private key
keyPath: "path/to/key.pem",
// A path to a self-signed certificate
certPath: "path/to/cert.pem",
},
};
又见 examples。 。 。 .
限制
- 关闭编译器
v20180910.0.0 - 关闭模板 QQ
2019-03-07 - 关闭图书馆 <
v20200224.0.0(部分内容)- 注:闭合编译器不支持
goog.requireType()在块特性中. 关闭 图书馆v20200224+ 包含goog.requireType(),所以你不能用块. 见 块与 goog. requireType 相不相通 ! 发行 #3931 • 谷歌/闭合-编译器
- 注:闭合编译器不支持
- google - 关闭 - 窗口
v20210406
提示
使用 AWS Lambda 批量模式
鸭子提供批量模式,在AWS Lambda上同时编译所有入口 恶心的js。 。 。 .
const closureVersion = require("google-closure-compiler/package.json").version;
module.exports = {
batchOptions: {
region: "ap-northeast-1",
awsLambdaOptions: {
Runtime: "nodejs10.x",
},
include: ["path/to/your/source/**/*.js"],
exclude: ["**/*_spec.js"],
packageJson: {
dependencies: {
"google-closure-compiler-linux": closureVersion,
"google-closure-library": closureVersion,
},
},
},
};
- 运行
build或者说build:js命令为--batch aws。 。 。 .
$ duck build --batch aws
在批量模式下如何调试 ?
- 使用
--batch local页:1 本地调试 - 使用
DEBUG=faast:info或者说 其他日志级别 获取更多的调试信息 - 获取
logUrl从调试信息中查看并在 Cloud Watch 日志中查看 - 使用
FAAST_PACKAGE_DIR=foo/bar调查寄给Lambda的包裹
又见 fast.js 文档 更多信息.
如何在 HTTPS 和 HTTP2 中使用 duck serve? 吗?
创建自签名证书 喜欢
$ openssl req -x509 -newkey rsa:4096 -keyout duck-key.pem -out duck-cert.pem -days 365 -nodes -subj '/CN=localhost'
然后指定并启用 http2 内 duck.config.js。 。 。 .
module.exports = {
http2: true,
https: {
keyPath: "./path/to/duck-key.pem",
certPath: "./path/to/duck-cert.pem",
},
};
bash/zsh- 命令和选项的补全
初始设定 :
$ duck completion >> ~/.bashrc
# or
$ duck completion >> ~/.zshrc
然后,您可以通过 塔布 来啊!
$ duck build:<TAB>
build:deps -- Generate deps.js
build:js -- Compile JS files
build:soy -- Compile Soy templates
发展
此寄存器是一个 小时 工作空间。 根包子是:
@cybozu/duck 本身和 examples/* 私有工作空间软件包
依赖它通过 workspace:*。 。 。 .
$ pnpm install
$ pnpm test # clean, lint, build and unit tests
$ pnpm --recursive --filter "./examples/*" test
pnpm 只解决已发布至少7天的版本
(单位:千美元)minimumReleaseAge 内 pnpm-workspace.yaml) (中文(简体) ).
释放
释放是自动的
请放行土地承诺
master 如下
常规武器委员会请放行
保持发布 PR 与下一个版本和 ChangeGELOG 的更新. 合并
pR 创建 GitHub 发布并发布软件包到 npm
来源.
许可证
麻省理工学院许可证:Cybozu, Inc.