小编dan*_*aze的帖子

添加其他插件的webpack插件

我正在尝试创建一个插件,充当插件包装器,加载配置,文件等,为当前的webpack编译过程添加更多插件.

apply函数中我创建了插件,然后将它们应用于原始编译器,如下所示:

apply(compiler) {
  const plugins = [
    new HtmlWebpackPlugin(options1),
    new HtmlWebpackPlugin(options2),
    ...
  ];

  plugins.forEach((plugin) => {
    plugin.apply(compiler);
  });
});
Run Code Online (Sandbox Code Playgroud)

我的插件不会向webpack编译器添加任何钩子,但让其他插件添加它们.当容器项目使用webpack 4时它很好用但是在使用不同的webpack版本时我发现了一个错误.

其中一个注入的插件是html-webpack-plugin,这是我的插件的依赖:

的package.json

"dependencies": {
  "copy-webpack-plugin": "^4.5.1",
  "html-webpack-plugin": "^3.2.0",
  "webpack-bundle-analyzer": "^2.11.3"
}
Run Code Online (Sandbox Code Playgroud)

所以你可以想象,我注入了这3个插件的实例.

当使用我的插件的项目使用时会出现问题webpack 3,因为在某些时候,内部html-webpack-plugin需要使用NodeTemplatePlugin哪个html-webpack-plugin/node_modules/webpack.据我所知,html-webpack-plugin有自己webpackwebpack 4.由于原始传递compiler来自webpack 3,并且预期的NodeTemplatePluginwebpack 4我在最新尝试访问时遇到错误,compiler.hooks.thisCompilation因为它在编译器中不存在webpack 3.

有趣的是,在我的包中,json webpack被定义为 …

webpack html-webpack-plugin

8
推荐指数
0
解决办法
351
查看次数

HTML位置变量

我知道这很容易使用Javascript但是...有什么办法只用CSS吗?

假设我们在父母(米色)中有两个元素(绿色和红色).红色元素应始终位于绿色元素的右侧,除非绿色元素(因为内容)太大而不适合父母,在这种情况下红色元素将超过绿色元素(正常行为将是红色元素停留在绿色元素的右侧,因此由于父母的溢出而被隐藏)

换句话说:red.x = min(green.x + green.w,beige.x + beige.w-red.w)

示例图片

有关更多信息,请参阅具体的HTML:

<div class="beige" style="width:250px"> <!-- parent with a given width (unknown until the page is rendered) & overflow hidden -->
  <a class="green"> <!-- link with display:inline -->
    content
    <em class="red"></em> <!-- actually a button, 15 px width -->
  </a>
</div>
Run Code Online (Sandbox Code Playgroud)

编辑: @kyledws答案很棒,但我会用更多信息(需要的东西)更新问题,例如:

  • 红色仅在绿色时显示:悬停(这就是为什么它在绿色内)
  • 你不知道CSS中的米色宽度(在现实世界中,米色在定义的宽度内,但在页面呈现之前不知道)
  • 绿色内容是一个可变长度的文本,以及红色被推的原因
  • 如果绿色内容不适合父级,则应显示省略号(文本溢出:省略号;溢出:隐藏)
  • 必须在IE8 +中工作

html css

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

为什么C++ std :: list :: clear()没有调用析构函数?

看看这段代码:

class test
{
    public:
        test() { cout << "Constructor" << endl; };
        virtual ~test() { cout << "Destructor" << endl; };
};

int main(int argc, char* argv[])
{
    test* t = new test();
    delete(t);
    list<test*> l;
    l.push_back(DNEW test());
    cout << l.size() << endl;
    l.clear();
    cout << l.size() << endl;
}
Run Code Online (Sandbox Code Playgroud)

然后,看看这个输出:

    Constructor
    Destructor
    Contructor
    1
    0
Run Code Online (Sandbox Code Playgroud)

问题是:为什么没有调用list元素的析构函数l.clear()

c++ destructor list clear

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

如何在使用rails创建模型时为列指定排序规则

快速问题:如何在使用rails创建模型时为特定列指定排序规则?

我没有在rails API文档中找到任何选项,但我认为明确声明某些属性的排序规则非常重要.

假设默认排序规则是utf8_unicode_ci.但是在创建用户模型时,密码字段的归类应该是utf8_bin.

所以,当像这样使用rails时

rails g model Users username:string password:string
Run Code Online (Sandbox Code Playgroud)

您无法指定使用utf8_bin排序规则的密码.

有办法吗?

编辑: 生成的SQL应该是这样的:

CREATE TABLE `user` (
  `id`               INT(11) UNSIGNED NOT NULL AUTO_INCREMENT  COMMENT 'Unique ID',
  `username`         VARCHAR(32) NOT NULL                      COMMENT 'Nick/username',
  `password`         VARCHAR(32) COLLATE utf8mb4_bin           COMMENT 'Encoded password',

  PRIMARY KEY(`id`),
  INDEX(`username`)
);
Run Code Online (Sandbox Code Playgroud)

如果您不能通过命令直接执行此操作我不在乎您必须修改该db/timestamp_create_users.rb文件.但重点是能够使用rails迁移.

mysql ruby-on-rails

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

有人可以解释为什么这不起作用吗?

这个想法是强制不使用传递给函数的对象中的某些字段,并且您可以使用其他任何内容(这就是为什么extends

type ForbiddenFields = 'a' | 'b' | 'c';
type Data = { [K in ForbiddenFields]?: never };

function foobar<T extends Data>(data: T): void {
  //...
}

const obj = { x: 1, y: 2 };
foobar(obj); // Type '{ x: 1, y: 2 }' has no properties in common with type Data
Run Code Online (Sandbox Code Playgroud)

为什么我得到

类型 '{ x: 1, y: 2 }' 与 Data 类型没有共同的属性

如果函数只是期望一个扩展的 Data对象,那么这不是等于说<T extends {}>但只是强制执行如果ForbiddenField指定了 a 则它必须存在never- …

typescript

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

有什么方法可以将值(如枚举)从前端(js)连接到后端(php/ruby)?

给定后端基于 php 或 ruby​​ 的 Web 应用程序,并在前端使用 javascript 进行编程,有时我们需要在两侧定义值来处理通过 API 进行前端-后端通信的数据。

在javascript中会是这样的:

var options = {
        OPT_A : 1,
        OPT_B : 2,
        OPT_C : 3
    };

switch(data.type)
{
    case options.OPT_A:
        /* */
        break;
    case options.OPT_B:
        /* */
        break;
    case options.OPT_C:
        /* */
        break;
}
Run Code Online (Sandbox Code Playgroud)

在 php 中是这样的:

const OPT_A = 1;
const OPT_B = 2;
const OPT_C = 3;
Run Code Online (Sandbox Code Playgroud)

但问题是,你必须定义它们两次,每种语言一次。这可能会导致错误/不一致...

我想到的唯一方法是从服务器定义 javascript 部分,但我不喜欢 js 代码由 php/ruby 代码编写的想法。

所以我的问题是......有没有什么好的方法可以做到这一点?

javascript php ruby code-design

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

如何扩展在其方法中返回此类的类

问题很简单,但我不确定是否可以这样做......

如果我们有类似的课程

class A {
    private int foo;

    public A(int bar) {
       this.foo = bar;
    }

    public A setFoo(int bar) {
       this.foo = bar;
       return this;
    }

    public int getFoo() {
       return this.foo;
    }

    public void doSomething() {
       this.foo++;
    }
}
Run Code Online (Sandbox Code Playgroud)

我们可以看到它只是一个私有成员和一个setter/getter的类.有趣的是,为了允许方法链接,setter正在返回this.

所以我们可以这样做:

A a = new A(0);
a.setFoo(1).doSomething();
Run Code Online (Sandbox Code Playgroud)

这里的问题是当我尝试扩展该类时添加一些实现这样的接口的功能

class B extends A implements I {
    public B(int bar) {
        this.super(bar);
    }

    public void methodI() {
        // whatever
    }
}
Run Code Online (Sandbox Code Playgroud)

看起来没问题,直到我开始像这样使用它

B b = new B(1);
b.setFoo(2).methodI(); …
Run Code Online (Sandbox Code Playgroud)

java inheritance libgdx

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

libgdx/Android:应用程序被销毁/暂停后图形消失

我正在做一些测试,我意识到在我的 Nexus 5 上,当我按下后退键(或主页)时 -也就是说,当上下文发生变化时- 并且我返回到我的游戏时,openGL 上下文会丢失。

不再有纹理(它们显示为黑色)或 UI 皮肤(按钮为白色)。

我以为它是由 libgdx 自动管理的,对吧?那么为什么会发生这种情况呢?

我创建纹理的方式是 via TextureAtlas,就像

TextureAtlas atlas;
TextureRegion bg;
atlas = new TextureAtlas(Gdx.files.internal("mainMenu.atlas"));
bg = atlas.findRegion("bg");
Run Code Online (Sandbox Code Playgroud)

然后它与batch.draw(bg, x, y, w, h);

我还尝试TextureRegion直接创建加载纹理而不是TextureAtlas(以防万一,但它应该是相同的),我得到了相同的结果......

任何人?

编辑:更具体的代码:

屏幕类基础知识:

public class MainMenuScreen extends ScreenManager.Screen {

        private Game game;
    private InputMultiplexer inputMultiplexer = new InputMultiplexer();

    private MainMenuUi screenUi;
    private MainMenuView screenView;

    private TextureAtlas atlas;

    public MainMenuScreen(ConbiniGame game) {
        this.game = game;

        atlas = new TextureAtlas(Gdx.files.internal("mainMenu.atlas"));
        screenUi …
Run Code Online (Sandbox Code Playgroud)

java android textures opengl-es libgdx

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

在 VS Code 中:[ts] 找不到模块“@src/xxx”

所以,我正在使用这个tsconfig.json

{
  "compilerOptions": {
    "baseUrl": ".",
    "declaration": true,
    "module": "ES6",
    "moduleResolution": "node",
    "outDir": "./lib/",
    "paths": {
      "@src/*": ["src/*"]
    },
    "preserveConstEnums": true,
    "removeComments": true,
    "sourceMap": true,
    "target": "ES6"
  },
  "include": [
    "global.d.ts",
    "src/**/*.ts"
  ]
}
Run Code Online (Sandbox Code Playgroud)

在哪里可以看到别名@src是为我的代码定义的。

tsc/webpack构建所有内容都没有问题,但是在 VS Code 中进行编辑时,当我将某些内容作为

import { xxx } from '@src/xxx';
Run Code Online (Sandbox Code Playgroud)

有同样问题的人吗?对我来说,看到这一点很奇怪,因为如果它正确编译/构建(来自 tscwebpack),这意味着配置是正确的。那么为什么 VS Code 会显示这个错误消息呢?这只是烦人,但我想解决它。

tsconfig.json文件也使用标准名称(没有自定义-p选项tsc)所以,VS Code 应该能够自动读取它,对吧?或者IDE需要任何额外的配置?

typescript visual-studio-code

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

0xC0000005:访问冲突写入位置

我有这个函数从文件中读取文本:

uintmax_t ResourcePack::getText(const string& file, char** data)
{
    *data = new char[static_cast<size_t>(size) + 1];
    fseek(_fileDescriptor, static_cast<long>(begin), SEEK_SET);
    fread(*data, static_cast<size_t>(size), 1, _fileDescriptor);
    *data[size] = '\0';
}
Run Code Online (Sandbox Code Playgroud)

FILE* _fileDescriptor, uintmax_t sizeuintmax_t begin获得其他代码,这里不重要,但具有正确的值.

fseekfread线条工作正常.实际上,我有*数据中的文件内容,但是当执行最后一行时,我得到了访问冲突.

为什么我可以写入*data使用fread,但不是using *data[size] = '\0'

c++

0
推荐指数
1
解决办法
3929
查看次数