我正在尝试创建一个插件,充当插件包装器,加载配置,文件等,并为当前的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有自己webpack的webpack 4.由于原始传递compiler来自webpack 3,并且预期的NodeTemplatePlugin是webpack 4我在最新尝试访问时遇到错误,compiler.hooks.thisCompilation因为它在编译器中不存在webpack 3.
有趣的是,在我的包中,json webpack被定义为 …
我知道这很容易使用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答案很棒,但我会用更多信息(需要的东西)更新问题,例如:
看看这段代码:
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()?
快速问题:如何在使用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迁移.
这个想法是强制不使用传递给函数的对象中的某些字段,并且您可以使用其他任何内容(这就是为什么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- …
给定后端基于 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 代码编写的想法。
所以我的问题是......有没有什么好的方法可以做到这一点?
问题很简单,但我不确定是否可以这样做......
如果我们有类似的课程
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) 我正在做一些测试,我意识到在我的 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) 所以,我正在使用这个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)
有同样问题的人吗?对我来说,看到这一点很奇怪,因为如果它正确编译/构建(来自 tsc和webpack),这意味着配置是正确的。那么为什么 VS Code 会显示这个错误消息呢?这只是烦人,但我想解决它。
tsconfig.json文件也使用标准名称(没有自定义-p选项tsc)所以,VS Code 应该能够自动读取它,对吧?或者IDE需要任何额外的配置?
我有这个函数从文件中读取文本:
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 size并uintmax_t begin获得其他代码,这里不重要,但具有正确的值.
fseek和fread线条工作正常.实际上,我有*数据中的文件内容,但是当执行最后一行时,我得到了访问冲突.
为什么我可以写入*data使用fread,但不是using *data[size] = '\0'?
c++ ×2
java ×2
libgdx ×2
typescript ×2
android ×1
clear ×1
code-design ×1
css ×1
destructor ×1
html ×1
inheritance ×1
javascript ×1
list ×1
mysql ×1
opengl-es ×1
php ×1
ruby ×1
textures ×1
webpack ×1