我想以manifest.json"更智能"的程序化方式汇编Chrome扩展程序使用的文件.我正在使用npm进行依赖项解析,它package.json包含一些与manifest.json文件共享的字段,包括"name","description"和"version".
有没有办法定义类似于部分manifest.json文件的内容,其中包含所有特定于Chrome的内容,但是在适当的地方填写共享值?我发现这在Gulp中非常简单:
var gulp = require('gulp');
var fs = require('fs');
var jeditor = require('gulp-json-editor');
gulp.task('manifest', function() {
var pkg = JSON.parse(fs.readFileSync('./package.json'));
gulp.src('./manifest.json')
.pipe(jeditor({
'name': pkg.name,
'description': pkg.description,
'version': pkg.version,
'author': pkg.author,
'homepage_url': pkg.homepage,
}))
.pipe(gulp.dest("./dist"));
});
Run Code Online (Sandbox Code Playgroud)
即使有一些为此目的而设计的npm包,有人可以向我解释一般这样的事情是怎么做的吗?我知道Webpack 2有一个内置的json加载器,但我不清楚如何在这样的情况下使用它.
在提出一种在我的Bash脚本中捕获错误的方法的过程中,我一直在试验"set -e","set -E"和"trap"命令.在这个过程中,我发现了一些奇怪的行为,如何$LINENO在函数的上下文中进行评估.首先,这是我正在尝试记录错误的简化版本:
#!/bin/bash
set -E
trap 'echo Failed on line: $LINENO at command: $BASH_COMMAND && exit $?' ERR
Run Code Online (Sandbox Code Playgroud)
现在,根据故障发生的位置,行为会有所不同.例如,如果我遵循以上内容:
echo "Should fail at: $((LINENO + 1))"
false
Run Code Online (Sandbox Code Playgroud)
我得到以下输出:
Should fail at: 6
Failed on line: 6 at command: false
Run Code Online (Sandbox Code Playgroud)
一切都如预期.第6行是包含单个命令"false"的行.但是如果我将失败的命令包装在一个函数中并像这样调用它:
function failure {
echo "Should fail at $((LINENO + 1))"
false
}
failure
Run Code Online (Sandbox Code Playgroud)
然后我得到以下输出:
Should fail at 7
Failed on line: 5 at command: false
Run Code Online (Sandbox Code Playgroud)
如您所见,$BASH_COMMAND包含正确的失败命令:"false",但是$LINENO将"失败"函数定义的第一行报告为当前命令.这对我来说毫无意义.有没有办法获得引用的行号$BASH_COMMAND?
这种行为可能特定于旧版本的Bash.我暂时停留在3.2.51.如果在以后的版本中行为发生了变化,那么知道是否有一种解决方法可以获得我想要的值3.2.51仍然是一件好事.
编辑:我害怕有些人感到困惑,因为我把我的例子分成了几块.让我试着澄清一下我拥有什么,我得到了什么,以及我想要什么.
这是我的脚本:
#!/bin/bash …Run Code Online (Sandbox Code Playgroud) 我有一个服务帐户,我想授予其在特定名称空间中读取/写入/更新/删除机密的权限。我不清楚服务帐户,角色,绑定等如何完全配合以授予正确的权限。
kubectl我需要执行哪些调用或YAML才能将这些权限授予服务帐户?
这是我到目前为止拥有的服务帐户的YAML:
apiVersion: v1
kind: ServiceAccount
metadata:
creationTimestamp: 2018-10-09T17:45:20Z
name: testaccount
namespace: test
resourceVersion: "369702913"
selfLink: /api/v1/namespaces/test/serviceaccounts/testaccount
uid: f742ed5c-c1b3-11e8-8a69-0ade4132ab56
secrets:
- name: testaccount-token-brjxq
Run Code Online (Sandbox Code Playgroud) 我正在用Python编写一个程序,我正在考虑使用本地客户端 - 服务器模型,但我正在努力找出服务器与客户端通信的最佳方式.一个简单的罐装解决方案是最好的 - 我不打算重新发明轮子.以下是我对此计划的需求:
客户类型1似乎很简单; 这是一个单向的哑管.客户端类型2更有趣.我想避免简单地轮询服务器以定期检查新数据,因为这会为用户增加明显的延迟.当状态信息被更新时,服务器需要某种方式向所有且仅向相关客户端发信号,以便客户端可以从服务器接收更新的状态.客户端类型3必须是双向的; 它会将用户提供的数据发送到服务器,并在每次发送后收到某种响应.
我查看了Python的IPC页面(http://docs.python.org/2/library/ipc.html),但我认为这些解决方案中的任何一个都不适合我的需求.子进程模块是完全不合适的,其他一切都比我想要的低一些.
类似的问题Efficient Python to Python IPC并不完全相同; 我不需要传输Python对象,我并不特别担心我拥有的客户端数量的CPU效率,我只关心Linux,而且无论如何这个问题的答案对我都没有帮助.
我不能接受只是指向框架/库/模块/工具的答案,而不实际解释它如何用于我的三种不同的服务器 - 客户端关系.如果你说,"所有这一切都可以通过命名管道完成!" 我不得不问"怎么样?" 代码片段是理想的,但对解决方案的高级描述也可以起作用.
让我首先承认,我想要做的事情可能被认为是从愚蠢到邪恶,但我想知道我是否可以用Python做到这一点.
假设我有一个函数装饰器,它接受定义变量的关键字参数,我想在包装函数中访问这些变量.我可能会这样做:
def more_vars(**extras):
def wrapper(f):
@wraps(f)
def wrapped(*args, **kwargs):
return f(extras, *args, **kwargs)
return wrapped
return wrapper
Run Code Online (Sandbox Code Playgroud)
现在我可以这样做:
@more_vars(a='hello', b='world')
def test(deco_vars, x, y):
print(deco_vars['a'], deco_vars['b'])
print(x, y)
test(1, 2)
# Output:
# hello world
# 1 2
Run Code Online (Sandbox Code Playgroud)
我不喜欢这样的事情是当你使用这个装饰器时,你必须改变函数的调用签名,除了在装饰器上拍打之外还要添加额外的变量.另外,如果你查看函数的帮助,你会看到一个额外的变量,在调用函数时你不应该使用它:
help(test)
# Output:
# Help on function test in module __main__:
#
# test(deco_vars, x, y)
Run Code Online (Sandbox Code Playgroud)
这使得用户希望用3个参数调用该函数,但显然这不起作用.因此,您还必须向docstring添加一条消息,指示第一个参数不是接口的一部分,它只是一个实现细节,应该被忽略.不过,这有点糟糕.有没有办法在不将这些变量挂在全局范围内的情况下做到这一点?理想情况下,我希望它看起来如下:
@more_vars(a='hello', b='world')
def test(x, y):
print(a, b)
print(x, y)
test(1, 2)
# Output:
# hello world
# 1 2
help(test)
# Output:
# …Run Code Online (Sandbox Code Playgroud) 我正在尝试测试一个带Consumer函数的方法,我想用Mockito验证我的lambda表达式只被调用一次.我现在使用的是在最终的单元素数组上使用标志的那种笨重方式:
final boolean[] handlerExecuted = {false};
instance.conditionalRun(item -> {
handlerExecuted[0] = true;
item.foo();
});
Assert.assertTrue(
"Handler should be executed.",
handlerExecuted[0]);
Run Code Online (Sandbox Code Playgroud)
看起来应该有更好的方法(或许是Mockito间谍)来验证这个lambda表达式只被调用一次.
我想在视觉上突出显示共享相同属性的一组兄弟元素.
#boxed_contents span[data-boxme] {
display: inline-block;
border: 2px solid #00F;
border-radius: 5px;
}Run Code Online (Sandbox Code Playgroud)
<div id="boxed_contents">
<span>hello</span><!--
--><span>world</span><!--
--><span data-boxme>look</span><!--
--><span data-boxme>at</span><!--
--><span data-boxme>me</span>
</div>Run Code Online (Sandbox Code Playgroud)
这几乎就像我想要的那样,但是我想加入每个boxme元素周围的框,只留下一个框围绕这三个元素.我知道我可以将相邻boxme元素包装在包装div中,但由于这在概念上是一种视觉(而不是结构)选择,所以我真的很想在不修改HTML的情况下这样做.
有没有办法在纯CSS中执行此操作?如果失败了,加上一些直截了当的Javascript?
在vanilla Cucumber中,puts步骤定义中对的调用输出的任何内容都将捕获为“测试输出”并进行相应的格式化,如以下输出示例所示:
Feature: A simple thing
Scenario: A simple scenario # features/simple.feature:3
Given I do a step # features/steps/step.rb:1
This text is output with puts
Run Code Online (Sandbox Code Playgroud)
如上所见,它以“漂亮”输出格式缩进。在JSON格式中,它甚至以结构化方式捕获:
"keyword": "Scenario",
"name": "A simple scenario",
"line": 3,
"description": "",
"id": "a-simple-thing;a-simple-scenario",
"type": "scenario",
"steps": [
{
"keyword": "Given ",
"name": "I do a step",
"line": 4,
"output": [
"This text is output with puts"
],
}
],
Run Code Online (Sandbox Code Playgroud)
上面的代码是用一个简单的特征文件和一个步骤定义生成的,如下所示:
Given(/^I do a step$/) do
puts 'This text is output with puts'
end …Run Code Online (Sandbox Code Playgroud) 我目前有一个项目,其中包含大量 Cucumber.feature文件,其中许多场景都已损坏。这些场景被标记为@broken,我们通过执行 cucumber 来避免运行它们-t ~@broken。不幸的是,当我们检查黄瓜输出时,这使得这些场景实际上不可见。它们不会显示为通过、失败或跳过。我想要的是将这些场景的计数包含在黄瓜输出中。它们应该显示为“跳过”测试,而不是根本不显示。
我尝试过的:
Before('@broken') do |scenario|
pending
end
Run Code Online (Sandbox Code Playgroud)
但这引发了一个Cucumber::Pending异常,如果未捕获该异常,则该场景会失败。
我知道我可以写这样的步骤:
Given /^PENDING/ do
pending
end
Run Code Online (Sandbox Code Playgroud)
然后浏览我的所有功能文件,并将此步骤添加到每个场景中@broken标签的每个场景中。不过,这看起来很疯狂。它不符合“步骤”应有的语义(更不用说它需要对我的所有功能文件进行广泛的更改,而不仅仅是向标签添加挂钩)。
我只需要一个标签就可以做到这一点吗?
我正在开发一个 Chrome 扩展程序,它会影响(除其他外)页面上的 GIF 图像。我正在努力让它适用于初始页面加载后动态添加的新图像。这是我在内容脚本中添加的内容,试图处理这些内容:
\n\nfunction processGif(newTag) {\n console.log(newTag.src);\n}\n\nvar observer = new MutationObserver(function(mutations, obs) {\n for(var i=0; i<mutations.length; ++i) {\n for(var j=0; j<mutations[i].addedNodes.length; ++j) {\n var newTag = mutations[i].addedNodes[j];\n if(newTag.tagName == "IMG" && /.gif$/i.test(newTag.src)) {\n processGif(newTag);\n }\n }\n }\n});\n\nobserver.observe(document.documentElement, {\n childList: true,\n subtree: true\n});\nRun Code Online (Sandbox Code Playgroud)\n\n出于测试目的,我已将函数简化为标签属性的processGifa 。console.logsrc
大多数时候,它工作得很好,并成功捕获了在页面首次加载时最初构建 DOM 时创建的所有初始图像。但在 Google+ 等页面上,当您向下滚动时,MutationObserver 似乎无法捕获任何动态加载的帖子。我一直在使用Koushik Dutta 的公共页面进行测试\xe2\x80\x94这个人喜欢发布 gif。如果您尝试将上述代码粘贴到控制台并向下滚动,您应该能够确认没有检测到任何动态加载的图像。
\n\n为什么我看不到这些动态添加的img标签,我需要做什么来处理这样动态添加的图像?