我似乎无法让它发挥作用。我想将一些数据写入 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对象,我想转换为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
我有一个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
我有一个相当标准的用例 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
是文件路径的数组。不知道如何调试它。
我正在构建一个模块并将其发布到 npm。该模块依赖于React
. 我目前正在使用yarn
和yarn 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
或其他方式持开放态度。
我有一个动作和减速器来更新全局计数器.此操作将在快速间隔内触发.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-redux
的connect
方法.并非所有组件都关心此循环计数器.因为我在每个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都应用于完整状态.不确定是否相关.
我有一个页面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.js
homepage.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) 我有一个使用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) 我需要在Ruby中对混合数组进行排序.它有Fixnum
s和String
s
ar = [1, "cool", 3, "story", 4, "bro"]
我希望Fixnum
s优先于字符串,而不关心字符串的顺序.
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) 我有.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) javascript ×4
node.js ×3
npm ×2
reactjs ×2
arrays ×1
docker ×1
dockerfile ×1
gl-matrix ×1
gulp ×1
gulp-concat ×1
gulp-uglify ×1
io ×1
json ×1
jsonstream ×1
react-redux ×1
redux ×1
rendering ×1
routes ×1
ruby ×1
sorting ×1
stream ×1
testing ×1
typescript ×1
webpack ×1
yarnpkg ×1