小编use*_*471的帖子

如何使用webpack构建JSON文件?

我想以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加载器,但我不清楚如何在这样的情况下使用它.

javascript npm webpack

13
推荐指数
2
解决办法
6504
查看次数

如何获取失败的Bash命令的实际行号?

在提出一种在我的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)

bash

8
推荐指数
2
解决办法
3825
查看次数

授予Kubernetes服务帐户权限的秘密?

我有一个服务帐户,我想授予其在特定名称空间中读取/写入/更新/删除机密的权限。我不清楚服务帐户,角色,绑定等如何完全配合以授予正确的权限。

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)

rbac kubernetes

8
推荐指数
2
解决办法
2970
查看次数

适用于Linux的灵活IPC解决方案?

我正在用Python编写一个程序,我正在考虑使用本地客户端 - 服务器模型,但我正在努力找出服务器与客户端通信的最佳方式.一个简单的罐装解决方案是最好的 - 我不打算重新发明轮子.以下是我对此计划的需求:

  • 在Linux上运行
  • 服务器和客户端在同一系统上,因此我不需要通过网络.
  • 延迟不太可能让交互式用户烦恼.
  • 多个客户端可以连接到同一服务器.
  • 客户端独立于服务器启动,可以随时连接/断开连接.
  • 客户数量可以测量数十个; 我不需要非常高.
  • 客户可以有几种不同的风格:
    1. 流阅读器 - 读取连续的数据流(实际上,这是所有文本).
    2. 状态读者 - 读取一些状态信息,每隔一段时间更新一次.
    3. 写入者 - 将一些数据发送到服务器,每次都会收到一些响应.

客户类型1似乎很简单; 这是一个单向的哑管.客户端类型2更有趣.我想避免简单地轮询服务器以定期检查新数据,因为这会为用户增加明显的延迟.当状态信息被更新时,服务器需要某种方式向所有且仅向相关客户端发信号,以便客户端可以从服务器接收更新的状态.客户端类型3必须是双向的; 它会将用户提供的数据发送到服务器,并在每次发送后收到某种响应.

我查看了Python的IPC页面(http://docs.python.org/2/library/ipc.html),但我认为这些解决方案中的任何一个都不适合我的需求.子进程模块是完全不合适的,其他一切都比我想要的低一些.

类似的问题Efficient Python to Python IPC并不完全相同; 我不需要传输Python对象,我并不特别担心我拥有的客户端数量的CPU效率,我只关心Linux,而且无论如何这个问题的答案对我都没有帮助.

更新:

我不能接受只是指向框架/库/模块/工具的答案,而不实际解释它如何用于我的三种不同的服务器 - 客户端关系.如果你说,"所有这一切都可以通过命名管道完成!" 我不得不问"怎么样?" 代码片段是理想的,但对解决方案的高级描述也可以起作用.

python linux client-server ipc

7
推荐指数
1
解决办法
1090
查看次数

装饰器如何在不改变签名的情况下将变量传递给函数?

让我首先承认,我想要做的事情可能被认为是从愚蠢到邪恶,但我想知道我是否可以用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)

python

7
推荐指数
1
解决办法
1362
查看次数

使用Mockito,如何验证我的lambda表达式被调用?

我正在尝试测试一个带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表达式只被调用一次.

java mockito java-8

6
推荐指数
1
解决办法
5784
查看次数

如何围绕某些兄弟HTML元素绘制一个框?

我想在视觉上突出显示共享相同属性的一组兄弟元素.

#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?

html css

5
推荐指数
2
解决办法
984
查看次数

如何像黄瓜Ruby的puts一样在黄瓜JVM中捕获STDOUT?

在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)

java cucumber cucumber-jvm

5
推荐指数
1
解决办法
2350
查看次数

如何在 Cucumber 中“跳过”带有标签的场景?

我目前有一个项目,其中包含大量 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标签的每个场景中。不过,这看起来很疯狂。它不符合“步骤”应有的语义(更不用说它需要对我的所有功能文件进行广泛的更改,而不仅仅是向标签添加挂钩)。

我只需要一个标签就可以做到这一点吗?

ruby cucumber

3
推荐指数
1
解决办法
4465
查看次数

为什么我的 MutationObserver 回调没有针对某些新标签执行?

我正在开发一个 Chrome 扩展程序,它会影响(除其他外)页面上的 GIF 图像。我正在努力让它适用于初始页面加载后动态添加的新图像。这是我在内容脚本中添加的内容,试图处理这些内容:

\n\n
function 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});\n
Run Code Online (Sandbox Code Playgroud)\n\n

出于测试目的,我已将函数简化为标签属性的processGifa 。console.logsrc

\n\n

大多数时候,它工作得很好,并成功捕获了在页面首次加载时最初构建 DOM 时创建的所有初始图像。但在 Google+ 等页面上,当您向下滚动时,MutationObserver 似乎无法捕获任何动态加载的帖子。我一直在使用Koushik Dutta 的公共页面进行测试\xe2\x80\x94这个人喜欢发布 gif。如果您尝试将上述代码粘贴到控制台并向下滚动,您应该能够确认没有检测到任何动态加载的图像。

\n\n

为什么我看不到这些动态添加的img标签,我需要做什么来处理这样动态添加的图像?

\n

html javascript google-chrome mutation-observers

2
推荐指数
1
解决办法
2124
查看次数