小编kev*_*ler的帖子

Node.js 如何通过管道将 gzip 流传输到 writestream

我似乎无法让它发挥作用。我想将一些数据写入 gzip 流,然后将 gzip 流通过管道传输到文件写入流。我想在文件写入完成后调用一个函数。我目前有:

  var gz = zlib.createGzip()
               .pipe(fs.createWriteStream(gz_path));

  gz.write(data);

  gz.on('error', function(err){
    console.log("wtf error", err);
  });

  gz.on('finish', function(){
    console.log("write stream is done");
    dosomething();
  });
Run Code Online (Sandbox Code Playgroud)

永远不会调用完成事件或错误事件。

javascript node.js

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

如何使用流来JSON字符串化Node.js中的大型嵌套对象?

我有一个大的javascript对象,我想转换为JSON并写入文件.我想我可以使用像这样的流来做到这一点

  var fs = require('fs');
  var JSONStream = require('JSONStream');
  var st = JSONStream.stringifyObject()
             .pipe(fs.createWriteStream('./output_file.js'))

  st.write(large_object);
Run Code Online (Sandbox Code Playgroud)

当我尝试这个时,我收到一个错误:

stream.js:94
  throw er; // Unhandled stream error in pipe.
        ^
TypeError: Invalid non-string/buffer chunk
    at validChunk (_stream_writable.js:153:14)
    at WriteStream.Writable.write (_stream_writable.js:182:12)
Run Code Online (Sandbox Code Playgroud)

所以显然我不能写一个对象stringifyObject.我不确定下一步是什么.我需要将对象转换为缓冲区?通过一些转换流运行对象并将其传递给strinigfyObject

io json stream node.js jsonstream

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

如何从引擎覆盖Rails应用程序路由?

我有一个Rails应用程序,我正在尝试将Rails引擎集成到.

主机应用程序有一些捕获所有路线:

  # magic urls
  match '/' => 'admin/rendering#show'
  match '*path/edit' => 'admin/rendering#show', :defaults => { :editing => true }
  match '*path' => 'admin/rendering#show'
Run Code Online (Sandbox Code Playgroud)

看起来应用程序捕获所有路由后加载引擎路由.

/sitemap.xml(.:format)                                            {:format=>"xml", :controller=>"admin/sitemaps", :action=>"show"}
                              /(.:format)                                                       {:controller=>"admin/rendering", :action=>"show"}
                              /*path/edit(.:format)                                             {:controller=>"admin/rendering", :action=>"show"}
                              /*path                                                            {:controller=>"admin/rendering", :action=>"show"}
           engine_envs GET    /engine/envs/:id(.:format)                                       {:controller=>"engine/envs", :action=>"show"}
                       PUT    /engine/envs/:id(.:format)                                       {:controller=>"engine/envs", :action=>"update"}
                jammit        /assets/:package.:extension(.:format)                             {:extension=>/.+/, :controller=>"jammit", :action=>"package"}
Run Code Online (Sandbox Code Playgroud)

到目前为止,一切都在击中/engine/envs路线被应用程序捕获所有路线.但是我发现堵塞路线是在发动机后加载的,我不相信那些被抓住了.有没有办法覆盖应用程序路线?

routes ruby-on-rails ruby-on-rails-plugins rails-engines ruby-on-rails-3

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

如何调试gulp-sourcemaps什么也不做?

我有一个相当标准的用例 gulp-sourcemaps

https://github.com/floridoo/gulp-sourcemaps

  gulp.src( bundle.src)
           .pipe(sourcemaps.init())
           .pipe(concat(bundle.dst + '.' + opts.ext))
            .pipe(uglify())
            .pipe(sourcemaps.write())
            .pipe(gulp.dest('./public/built'));
Run Code Online (Sandbox Code Playgroud)

这将生成适当级联和丑陋的文件。但是,没有源映射添加到它们。bundle.src是文件路径的数组。不知道如何调试它。

node.js gulp gulp-sourcemaps gulp-concat gulp-uglify

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

需要一个“yarn/npm 链接”工作流来开发和发布“多个 react 副本”模块

我正在构建一个模块并将其发布到 npm。该模块依赖于React. 我目前正在使用yarnyarn link

我已经在父项目中构建了这个模块,现在正试图将它提取到一个独立的模块中。我想继续在本地开发模块作为父项目的一部分。

package.json在模块的样子:

  "devDependencies": {
    "react": "^16.1.1",
    "react-reconciler": "^0.6.0",
    "react-dom": "^16.0.0",
    "regl": "^1.3.0",
}
Run Code Online (Sandbox Code Playgroud)

我通过yarn link在模块目录中运行然后yarn link module-name在父目录中运行将此模块包含在父投影中。当包含在父项目中时会抛出错误

元素 ref 被指定为字符串(画布),但未设置所有者。您可能加载了多个 React 副本。(详情:https : //reactjs.org/warnings/refs-must-have-owner.html)。

我之前曾尝试过使用npm代替这个工作流程yarn,但遇到了同样的问题。

我希望这是一个已解决的样板问题。我看过其他项目,但没有看到通用的解决方案。我正在寻找一个高级别的最佳实践答案。我对使用的配置webpack rollup或其他方式持开放态度。

javascript npm reactjs yarnpkg

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

如何限制react-redux连接更新重新渲染到特定的状态分支?

我有一个动作和减速器来更新全局计数器.此操作将在快速间隔内触发.reducer为每个动作返回一个新的状态副本.减速机看起来像:

import { handleActions } from 'redux-actions';
import { sceneTick } from './actions';

export default (state, action) => handleActions({
  [sceneTick]: (state, action) => {
    return {
      ...state,
      loop: action.payload,
    }
  },
Run Code Online (Sandbox Code Playgroud)

我在各种React组件上使用react-reduxconnect方法.并非所有组件都关心此循环计数器.因为我在每个tick上都在reducer中返回一个新状态,所有订阅的组件connect都会mapDispatchToProps被执行,这会导致不必要的React渲染调用.

其中一个组件看起来像:

const mapStateToProps = (state, props) => {
  return {
    viewport: state.viewport,
    assets: state.assets,
  };
};


export default connect(mapStateToProps, {})(Component)
Run Code Online (Sandbox Code Playgroud)

即使该组件没有依赖,state.loop它也会被触发重新渲染.这会导致重新渲染,重叠渲染,多次渲染,不必要的渲染,性能问题以及不需要重新渲染的组件中的意外行为.

更新 我也应该添加我不在combineReducers这里使用,所有reducers都应用于完整状态.不确定是否相关.

javascript rendering reactjs redux react-redux

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

如何在页面部分嵌套nightwatch.js命令?

我有一个页面pages/login.js看起来像:

function fillAndSubmitLogin(email, password) {
  return this
  .waitForElementVisible('@emailInput')
  .setValue('@emailInput', email)
  .setValue('@passwordInput', password)
  .waitForElementVisible('@loginSubmitButton')
  .click('@loginSubmitButton');
}


export default {
  commands: [
    fillAndSubmitLogin
  ],
  elements: {
    emailInput: 'input#email',
    passwordInput: 'input[type=password]',
    TFAInput: 'input#token',
    loginSubmitButton: '.form-actions button.btn.btn-danger'
  }
};
Run Code Online (Sandbox Code Playgroud)

我有另一个页面pages/hompage.jshomepage.js尝试包括pages/login.js作为一个部分

import login from "./login.js";

module.exports = {
  url: 'http://localhost:2001',
  sections: {
    login: {
      selector: 'div.login-wrapper',
      ...login
    }
  }
};
Run Code Online (Sandbox Code Playgroud)

然后我有一个试图登录hompage部分的测试用例

  'Homepage Users can login': (client) => {
    const homepage = client.page.homepage();
    homepage
    .navigate()
    .expect.section('@login').to.be.visible;


    const login = homepage.section.login; …
Run Code Online (Sandbox Code Playgroud)

javascript testing nightwatch.js

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

如何将Docker ENTRYPOINT设置为NPM?

我有一个使用npm脚本的Node.js项目.摘录自package.json:

  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "build-all": "./node_modules/.bin/webpack --progress --config ./webpack/client.config.js && ./node_modules/.bin/webpack --progress --config ./webpack/server.config.js",
    "web": "python -m SimpleHTTPServer 8888",
    "server" : "./node_modules/.bin/electron-spawn ./dist/server.js"
  },
Run Code Online (Sandbox Code Playgroud)

我正在Dockerfile为这个项目创建一个.我希望使用npm作为图像的ENTRYPOINT.在Dockerfile中我有:

ENTRYPOINT ['/usr/local/bin/npm' 'run']

当我尝试从图像中启动一个hcontainer它说它无法找到npm

root@vagrant-ubuntu-trusty-64:/home/vagrant# docker run my_image web
web: 1: web: [/usr/local/bin/npm: not found
Run Code Online (Sandbox Code Playgroud)

如果我在图像中启动一个shell,看起来npm可执行文件就在那条路径上

root@vagrant-ubuntu-trusty-64:/home/vagrant# docker run -i -t --entrypoint /bin/bash my_image
root@5e7362a64412:/# ls /usr/local/bin/npm
/usr/local/bin/npm
Run Code Online (Sandbox Code Playgroud)

npm docker dockerfile

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

如何使用混合字符串和Fixnums对Ruby数组进行排序

我需要在Ruby中对混合数组进行排序.它有Fixnums和Strings

ar = [1, "cool", 3, "story", 4, "bro"]

我希望Fixnums优先于字符串,而不关心字符串的顺序.

ar = [1,3,4,"cool","story","bro"]

我试过写一个方法 class Array

Class Array
  def mixed_sort
    self.sort do |a,b|
      if a.class == Fixnum and b.class != a.class
        -1
      else
        a <=> b
      end
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

我想我可能只是将一个块传递给该Array#sort方法.但是,此方法在按下块之前仍会引发错误

[1] pry(main)> [1, "11", '12', 3, "cool"].mixed_sort
ArgumentError: comparison of String with 3 failed
from /config/initializers/extensions/array.rb:3:in `sort'
Run Code Online (Sandbox Code Playgroud)

ruby arrays sorting ruby-on-rails

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

如何将其他类型导入到 typescript .d.ts 模块中

我有.d.ts一个外部模块的自定义文件,如下所示

declare module 'vertices-bounding-box' {
  export default function boundingBox(positions: [number,number,number][]): [number, number]
}
Run Code Online (Sandbox Code Playgroud)

[number,number,number]我不想使用另一个模块中的类型,例如:

import { vec3 } from 'gl-matrix';

declare module 'vertices-bounding-box' {
  export default function boundingBox(positions: vec3[]): [number, number]
}
Run Code Online (Sandbox Code Playgroud)

当我添加导入声明时,TSC 抱怨vec3道:

Invalid module name in augmentation. Module 'vertices-bounding-box' resolves to an untyped
module at '/Users/kevzettler/code/hypeworks/node_modules/vertices-bounding-box/index.js', which cannot be augmented. [2665]
Run Code Online (Sandbox Code Playgroud)

typescript webpack gl-matrix typescript-typings

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