我想用gulp完成一些简单的事情.我想编写一个通用方法,将文件从特定的源目录移动到输出目录.
假装我们有类似的东西
var args = require('yargs');
function transform-move-jsx-Development()
{
gulp.src(config.sourceJSX)
.pipe(react, browserify, etc....)
.pipe(gulp.dest(config.output_development));
};
function transform-move-jsx-Production()
{
gulp.src(config.sourceJSX)
.pipe(react, browserify, etc....)
.pipe(gulp.dest(config.output_production));
};
gulp.task('transform-move-jsx-Development', transform-move-jsx-Development);
gulp.task('transform-move-jsx-Production', transform-move-jsx-Production);
gulp.task('prod', [transform-move-jsx-Production]);
gulp.task('dev', ['transform-move-jsx-Development']);
Run Code Online (Sandbox Code Playgroud)
这两个任务:transform-move-jsx-Production和transform-move-jsx-Development除了输出目录外是相同的.我想让它更干(不要重复自己).我应该能够制作一个可以使用yarg参数的方法吗?在下一个例子中,我假装我可以将路径作为arg传递
所以我尝试使用yargs这样的东西
var args = require('yargs');
function transform-move-jsx()
{
return gulp.src(config.sourceJSX)
.pipe(gulp.dest(args.outputDirectory));
};
gulp.task('dev', ['transform-move-jsx']);
Run Code Online (Sandbox Code Playgroud)
但是现在这需要我在命令行中为gulp调用添加参数
gulp dev --"path to output, etc."
Run Code Online (Sandbox Code Playgroud)
这显然不太可维护,因为我们从dev gulp任务中调用越来越多的gulp任务.反之亦然,因为我们不需要知道实现细节,比如运行时输出目录结构gulp dev
我可以做这样的事情:
function transform-move-jsx(destination)
{
return gulp.src(config.sourceJSX)
.pipe(gulp.dest(destination));
};
function transform-move-jsx-Development()
{
transform-move-jsx("./output/development/");
};
function transform-move-jsx-Production()
{
transform-move-jsx("./output/production/");
};
gulp.task('transform-move-jsx-Development',transform-move-jsx-Development);
gulp.task('transform-move-jsx-Production', transform-move-jsx-Production);
gulp.task('prod', …Run Code Online (Sandbox Code Playgroud) 我们的团队构建了一个用于维护的小型 CLI。package.json 指定了属性的路径bin,一切都很好;"bin": { "eddy": "./dist/src/cli/entry.js"}
自动完成是通过使用 来实现的yargs@17.0.1。然而,由于迁移到 Sveltekit,我们最近将项目转换为使用 es6 模块,即 package.json 现在包含type: module. 因此,CLI 现在仅在我们运行以下命令时才有效:
什么有效
node --experimental-specifier-resolution=node ./dist/src/cli/entry.js help
Run Code Online (Sandbox Code Playgroud)
但是,如果我们在没有该标志的情况下运行此命令,则会收到错误“找不到模块”:
Error [ERR_MODULE_NOT_FOUND]: Cannot find module...
Run Code Online (Sandbox Code Playgroud)
所以问题是
我们是否可以以某种方式“始终”将 the 添加experimental-specifier-resolution=node到 CLI - 这样我们就可以继续使用简写eddy并利用自动完成功能?
当用作npm脚本参数时,是否可以调出从yargs中检索密钥?
OSX终端中的用户类型:
npm run scaffold --name=blah
Run Code Online (Sandbox Code Playgroud)
在package.json中执行:
"scaffold" : "node ./scaffold/index.js -- "
Run Code Online (Sandbox Code Playgroud)
这导致了
const yargs = require('yargs').argv
if (yargs) {
console.log(yargs);
console.log(yargs.name);
process.exit(1)
}
...
result:
{ _: [], '$0': 'scaffold/index.js' }
undefined
Run Code Online (Sandbox Code Playgroud)
这只适用于我在package.json中的硬编码"scaffold" : "node scaffold/index.js --name=blah",但我需要这个是可配置的.
正如我所说,我正在使用args,因为它似乎可以很容易地按名称检索密钥(而不是数组).接受建议.
我错过了什么?
更新11-07-2017 相关:将命令行参数发送到npm脚本
但是,传递命令行1: npm run scaffold name=hello
OR会2: npm run scaffold --name=hello产生:
1: { _: [], '$0': 'scaffold/index.js' }
2: { _: [ 'name=hello' ], '$0': 'scaffold/index.js' }
Run Code Online (Sandbox Code Playgroud)
仍然看不到检索yargs.name财产的方法.仍未定义.
暂时,我放弃了.这似乎是不可能的.我在终端中手动运行脚本.例如 …
我正在尝试将我的 node.js 应用程序部署到google cloud并且我的 package.json 包含yargs依赖项。
当我将应用程序部署到谷歌云后,我收到错误无法在谷歌云平台日志中找到模块 yargs。
我该如何解决上述问题?
我在跑步:
node app.js add
Run Code Online (Sandbox Code Playgroud)
我的代码是:
const yargs = require('yargs');
yargs.command({
command:'add',
describe:'Adding command',
handler:function(){
console.log('Adding notes');
},
})
Run Code Online (Sandbox Code Playgroud)
但是控制台上没有打印任何内容。
我是 Node.js 新手,现在正在学习一些基础知识。我稍后尝试使用一些打字稿代码转换为 .js 代码。
我写了这个简单的代码来测试
import * as fs from 'fs'
const argv = require('yargs')
.alias('f', 'filename')
.alias('c', 'content')
.demandOption('filename')
.demandOption('content')
.argv
fs.writeFile(argv.filename, argv.content, (error)=>{
if(error)
throw error
console.log(`File ${argv.filename} saved.`)
})
Run Code Online (Sandbox Code Playgroud)
这很好用。但是当我更改需要导入的行require('yargs')时,如下所示:
import * as fs from 'fs'
import * as yargs from 'yargs'
const argv = yargs
.alias('f', 'filename')
.alias('c', 'content')
.demandOption('filename')
.demandOption('content')
.argv
fs.writeFile(argv.filename, argv.content, (error)=>{
if(error)
throw error
console.log(`File ${argv.filename} saved.`)
})
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
Argument of type 'unknown' is not assignable to parameter of type …Run Code Online (Sandbox Code Playgroud) I've been trying and trying, but just couldn't digest Yargs' docs.
I need to create a set of commands/subcommands:
~$framework generate routed-module ModuleOne ModuleTwo ModuleThree --animation-style=bounce-up
//would call a handler with:
{ modules: string[], options: {animationStyle?: AnimationStyle}}
type AnimationStyle = 'bounce-up' | 'slide-left'
Run Code Online (Sandbox Code Playgroud)
or
~$framework generate stateful-ui ModuleOne ModuleTwo ModuleThree
//would call a handler with:
{ modules: string[]}
Run Code Online (Sandbox Code Playgroud)
or
~$framework init
//would just call a handler
Run Code Online (Sandbox Code Playgroud)
I'd like aliases:
g for generate,
r for routed-module,
s for …
我正在使用yargs为传递给脚本的参数添加命令行选项。当我发出帮助命令以及脚本名称时,它不显示添加参数的帮助。
const yargs=require('yargs');
const argv= yargs.command('add', 'ADD A NOTE TO A FILE', {
title : {
describe : 'title of the file',
demand: 'true'
}
})
.help()
.argv;
root# node mainFile_node.js --help
Options:
--help Show help [boolean]
--version Show version number
node mainFile_node.js add
YARGS ARGV:-{ _: [ 'add' ], '$0': 'mainFile_node.js' }
Run Code Online (Sandbox Code Playgroud) 我正在尝试restart使用yargs 实现命令.我已经实现了start和stop命令以及我现在要做的所有事情,就是在restart命令中调用这些现有的命令.
不幸的是,它不能简单地使用 yargs.parse('stop');
yargs.command('start', '', () => {}, (argv) => {
console.log('Starting');
});
yargs.command('stop', '', () => {}, (argv) => {
console.log('Stopping');
});
yargs.command('restart', 'description', () => {}, (argv) => {
yargs.parse('stop');
yargs.parse('start');
});
Run Code Online (Sandbox Code Playgroud)
我也找不到与Github问题或API文档相关的任何内容.我错过了什么?
谢谢!
我正在尝试导入未按包文件列为导出的文件的内容package.json。库 (yargs) 建议通过 unpkg 之类的方式导入文件:
import Yargs from 'https://unpkg.com/yargs@17.5.1/browser.mjs';
但由于我正在构建一个 chrome 扩展,它违反了一项政策:
拒绝加载脚本“https://unpkg.com/yargs@17.5.1/browser.mjs”,因为它违反了以下内容安全策略指令:“script-src 'self' 'wasm-unsafe-eval'”。请注意,“script-src-elem”未明确设置,因此“script-src”用作后备。
安装包的结构是
yargs
-- build
-- stuff
-- helpers
-- index.cjs
-- package.json
-- index.cjs
-- index.mjs
-- yargs.cjs
-- ...
-- browser.mjs
Run Code Online (Sandbox Code Playgroud)
但由于 package.json 如下:
{// stuff
"exports": {
".": {
"import": "./index.mjs",
"require": "./index.cjs"
},
"./helpers": {
"import": "./helpers.mjs"
},
"./yargs": {
"require": "./yargs.cjs"
}
},
//}
Run Code Online (Sandbox Code Playgroud)
browser.mjs无法访问。
有没有办法跳过package.json导出配置并直接加载文件?我知道它就在那里,但由于某种原因无法解决。
问题变得更加严重,因为同样的情况也发生在 yargs 的依赖上,但我认为如果我能解决这个问题,另一个问题就会以同样的方式解决。
谢谢