小编Har*_*lue的帖子

HtmlWebpackPlugin 和 CompressionPlugin 不是。将 gzip 添加到包中

我有一个 React 应用程序,通过 ExpressJS 提供服务。我已配置 Webpack 来创建.gz资产。

但是 HtmlWebpackPlugin 在我的 index.html 中将包创建为.js文件。

我认为这是因为在output我的 prop中webpack.prod.js我有带有.js扩展名的文件名。

如何配置它以.gz在支持时返回扩展?

快递应用程序

const express = require('express');
const path = require('path');
const app = express();

app.use(express.static(path.resolve(__dirname, '../dist')));

app.get('*.js', function(req, res, next) {
    req.url = req.url + '.gz';
    res.set('Content-Encoding', 'gzip');
    next();
});

app.get('/healthz', (req, res) => res.send('OK'));
app.get('*', (req, res) =>
    res.sendFile(path.resolve(__dirname, '../dist/index.html'))
);

const PORT = process.env.SERVER_PORT || 3000;
const HOST = process.env.SERVER_HOST || '127.0.0.1'; …
Run Code Online (Sandbox Code Playgroud)

javascript gzip express webpack

5
推荐指数
0
解决办法
863
查看次数

使Vapor API响应符合JSON API规范

我有一个用Vapor编写的API.我想按照JSON API规范.

我正在努力理解如何以正确的格式创建我的响应对象.

例如,我希望我的回复结构如此......

{
  "links": {
    "self": "http://example.com/dish",
    "next": "http://example.com/dish?page=2",
    "last": "http://example.com/dish?page=10"
  },
  "data": [{
    "title": "Spag Bol",
    "course": "main",
    "description": "BasGetti",
    "price": 3.9900000000000002
  },
  {
    "title": "Ice Cream",
    "course": "desert",
    "description": "Vanilla",
    "price": 0.98999999999999999
  }]
}
Run Code Online (Sandbox Code Playgroud)

如果POST到这个端点,我可以非常简单地返回数据的内容(伪代码)

router.post(Dish.self, at: "api/dish") { req, data -> Future<Dish> in
    return Future.map(on: req, { () -> Dish in
        data.id = 001
        return data
    })
}
Run Code Online (Sandbox Code Playgroud)

我尝试创建一个ApiResponse类并传入数据,以便我可以构建响应,但这不适用于错误Cannot convert return expression of type 'ApiResonse' to return type 'Dish'

   router.post(Dish.self, …
Run Code Online (Sandbox Code Playgroud)

generics swift vapor

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

如何模拟 URLSession?

我正在查看一个用 Swift 4 编写的 iOS 应用程序。它有一个使用 URLSession 的相当简单的网络层,但是该应用程序没有单元测试,在我开始重构之前,我很想通过引入一些测试来解决这个问题。

在我能做到这一点之前,我必须能够模拟 URLSession这样我就不会在测试期间创建真正的网络请求。我在当前的实现中看不到如何实现这一目标?我在测试中注入 URLSession 的入口点在哪里。

我已经提取了网络代码并使用相同的逻辑创建了一个简单的应用程序,如下所示:

端点.swift

import Foundation

protocol Endpoint {
    var baseURL: String { get }
}

extension Endpoint {
    var urlComponent: URLComponents {
        let component = URLComponents(string: baseURL)
        return component!
    }

    var request: URLRequest {
        return URLRequest(url: urlComponent.url!)
    }
}

struct RandomUserEndpoint: Endpoint {
    var baseURL: String {
        return RandomUserClient.baseURL
    }
}
Run Code Online (Sandbox Code Playgroud)

APIClient.swift

import Foundation

enum Either<T> {
    case success(T), error(Error)
}

enum APIError: Error {
    case unknown, badResponse, …
Run Code Online (Sandbox Code Playgroud)

unit-testing ios xctest nsurlsession swift

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

在 Xcode 中构建时添加变量

我有一些动态值需要根据我在 Xcode 中执行的构建类型进行更改。

我创建了 2 个方案DEVPROD在每个方案中设置了环境变量

在此处输入图片说明

然后我在代码中使用这些如下

var serviceDomain: String {
    let envVar = ProcessInfo.processInfo.environment
    guard let value = envVar["APP_SERVICE_DOMAIN"] else { fatalError("Missing APP_SERVICE_DOMAIN enviroment variable") }
    return value
}
Run Code Online (Sandbox Code Playgroud)

这是解决这个问题的正确方法吗?

编译应用程序后,现在是否应该将这些值与它捆绑在一起?

我有一个问题,一旦我停止了模拟器,如果我尝试打开以这种方式构建的应用程序,它就会崩溃并且我怀疑环境变量不再存在。

简而言之,我想要一个使用一组变量的开发构建和一个使用另一个变量的发布/生产构建。

xcode build environment-variables ios swift

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

删除 UISearchBar 文本字段周围的填充

我正在尝试左对齐 .csv 文件中的文本字段UISearchBar

我说的是下面紫色的区域。

在此处输入图片说明

我已经能够通过设置背景来隐藏它,.clear但是我现在希望文本字段与上面文本的前缘对齐。我不确定我应该调整什么属性以正确左对齐整个搜索字段。

在此处输入图片说明

uitextfield uisearchbar ios autolayout swift

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

将文本与填充对齐 SwiftUI

我正在创建一个看起来像这样的视图 -

所需视图

我正在努力将摘要文本与图像叠加层内的文本对齐。

我希望研究的前沿与我的经验的前沿保持一致。

目前我的视图呈现为

第一次尝试

正如您所看到的,文本视图距离前缘太近。

我尝试添加.padding()但视图更改为

第二次尝试

如何正确插入文本以使这两个组件对齐?

import SwiftUI

struct ContentView: View {
  var body: some View {
    ZStack {
      FeaturedContentCard()
        .frame(minHeight: 100)
    }.padding()
  }
}

struct ContentView_Previews: PreviewProvider {
  static var previews: some View {
    ContentView()
  }
}

struct FeaturedContentCard: View {
  var body: some View {
    VStack {
      ImageWithTextOverlayView(image: "featured_image", text: "My experience with EAP and Income Protection")
      ContentCardSummary(text: "Research shows that our social enviroment significantly impacts our biology")
        .padding(.all)
      ContentCardMetaView(readTime: "10 …
Run Code Online (Sandbox Code Playgroud)

uilabel ios swift swiftui

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

在设备或 iOS 目标上运行时钥匙串单元测试失败

我有一个 iOS 项目。

我今天提取了一些身份验证代码并将其移至它自己的项目中。

该项目支持 macOS 和 iOS。

我创建了一个包含 iOS 项目和 Auth 项目的工作区,并且我已通过面板将 auth 添加.framework到我的 iOS 项目中Frameworks, Libraries, and Embedded Content

我可以构建和使用我的服务。我还设置了一个自定义方案CI_iOS,允许我为这些项目运行测试。

我现在已经在我的身份验证模块中添加了一些集成测试,这样我就可以KeychainTokenStore根据真正的钥匙串测试我的类。

这些在针对 macOS 测试我的模块时有效,但是尝试在 iOS 模拟器上运行它们时,它们都失败了。

我可以看到,当尝试与钥匙串交互时,会返回一个错误代码-34018,我相信这表明了这一点errSecMissingEntitlement

我读过很多帖子,似乎建议我需要启用钥匙串共享。

然而我似乎无法完成这项工作。

我的KeychainTokenStore样子是这样的


import Foundation


public protocol TokenStore {
  typealias DeleteCacheResult = Result<Void, Error>
  typealias DeleteCacheCompletion = (DeleteCacheResult) -> Void

  typealias InsertCacheResult = Result<Void, Error>
  typealias InsertCacheCompletion = (InsertCacheResult) -> Void

  typealias RetrieveCacheResult = Result<String?, Error>
  typealias …
Run Code Online (Sandbox Code Playgroud)

keychain ios keychainitemwrapper swift

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

如何将依赖项传递给 URLProtocol 子类?

我一直在研究拦截器,用于在我的应用程序中向网络请求添加身份验证标头。

final class AuthInterceptor: URLProtocol {


    private var token: String = "my.access.token"   
    private var dataTask: URLSessionTask?
    private struct UnexpectedValuesRepresentationError: Error { }
    
    override class func canInit(with request: URLRequest) -> Bool {
        guard URLProtocol.property(forKey: "is_handled", in: request) as? Bool == nil else { return false }

        return true
        
        //return false // URL Loading System will handle the request using the system’s default behavior
    }
    
    override class func canonicalRequest(for request: URLRequest) -> URLRequest {
        return request
    }
    
    override func startLoading() {
        guard …
Run Code Online (Sandbox Code Playgroud)

dependency-injection nsurlprotocol ios swift urlsession

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

多个 Git 修复提交

我想fixup对以前的提交进行提交。但是,fixup由于另一个原因,该提交已经对其进行了提交。

我应该针对最后一次修复提交进行新修复,还是我仍然可以针对原始提交进行修复,本质上意味着我有 1 个原始提交和 2 个修复提交。

git git-commit

4
推荐指数
1
解决办法
580
查看次数

模板编译“ AppModule”期间发生错误ERROR

尝试构建Angular 6应用。使用时出现以下错误--prod

ERROR in Error during template compile of 'AppModule'
  Expression form not supported in 'reducers'
    'reducers' contains the error at app/app.module.ts(48,3).
Run Code Online (Sandbox Code Playgroud)

app.module.ts

  import AuthEffects from './store/auth/auth.effects';
    import ContentEffects from './store/content/content.effects';
    import NavigationEffects from './store/navigation/navigation.effects';
    import ConfigEffects from './store/config/config.effects';

    import { ICommonAppState } from './app.state';
    import { reducer as authReducer, key as authKey } from './store/auth';
    import { reducer as configReducer, key as configKey } from './store/config';
    import { reducer as contentReducer, key as contentKey } from './store/content';
    import …
Run Code Online (Sandbox Code Playgroud)

ngrx angular2-aot angular

3
推荐指数
2
解决办法
2233
查看次数