小编Ami*_*spi的帖子

使用firebase privateKey作为Heroku配置变量转义问题

我正在尝试创建一个Heroku节点任务,从Firebase和console.log中读取数据.

我的节点脚本(位于/ bin目录中)是:

require('dotenv').config({ silent: true });

var firebase = require('firebase');
firebase.initializeApp({
  serviceAccount: {
    projectId: process.env.fb_projectId,
    clientEmail: process.env.fb_clientEmail,
    privateKey: process.env.fb_privateKey
  },
  databaseURL: process.env.fb_databaseURL
})

console.log(process.env.fb_privateKey);

firebase.database().ref('tasks').once('value', function(snapshot) {
  console.log(snapshot.val());
  process.exit();
})
Run Code Online (Sandbox Code Playgroud)

除了之外fb_privateKey,所有env变量都是正确的,因为它包含\n字符.

我的本地.env文件和Heroku环境变量都包含一个名为key的键fb_privateKey,一个值作为带有\n字符的字符串- 用".包围.

fb_privateKey="-----BEGIN PRIVATE KEY-----\nMY-PRIVATE-KEY\n-----END PRIVATE KEY-----\n"
Run Code Online (Sandbox Code Playgroud)

当我在本地运行脚本时,它会使用新行+从Firebase返回的任务向我记录私钥.但是,当我在Heroku上运行它时,(heroku run myScript)会记录带有\n字符的私钥(作为单行),并且无法从Firebase读取数据(可能是由于一个错误的私钥).有任何想法吗?

javascript heroku firebase firebase-realtime-database

27
推荐指数
1
解决办法
2742
查看次数

如何用gulp和'main-bower-files'选择缩小的依赖关系?

我正在尝试创建一个简单的gulp任务,它获取所有bower.json依赖项并将它们注入我的index.html文件.

这就是我的gulpfile.js的样子:

var gulp = require('gulp');
var bowerFiles = require('main-bower-files');
var inject = require('gulp-inject');

gulp.task('default', function() {
    gulp.src('./public/index.html')
        .pipe(inject(gulp.src(bowerFiles({
            paths: {
                bowerDirectory: './public/bower_components',
                bowerJson: './public/bower.json'
            }
        }), {read: false}), {name: 'bower'}))
        .pipe(gulp.dest('./build'));
});
Run Code Online (Sandbox Code Playgroud)

它有效.这就是我的index.html在./build目录下的样子:

<!-- bower:js -->
    <script src="/public/bower_components/zepto/zepto.js"></script>
<!-- endinject -->
Run Code Online (Sandbox Code Playgroud)

但是,我无法使main-bower-files获取我的缩小的依赖项(在此示例中,包含'/public/bower_components/zepto/zepto.min.js').

我试过这个覆盖选项:

{
    "overrides": {
        "BOWER-PACKAGE": {
            "main": "**/*.min.js"
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

还有这个:

{
    "overrides": {
        "BOWER-PACKAGE": {
            "main": {
                "development": "*.js",
                "production": "*.min.js",
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

它不起作用:(

我究竟做错了什么?

提前致谢!!

javascript gulp

13
推荐指数
2
解决办法
8538
查看次数

webpackJsonp未定义:webpack-dev-server和CommonsChunkPlugin

这是我的webpack.config.js文件:

const webpack = require('webpack');
const path = require('path');

module.exports = {
  cache: true,
  devtool: 'source-map',
  entry: {
    app : [
      './src/index.js'
    ],
    vendor: ['lodash']
  },
  output: {
    filename: 'bundle.js',
    path: path.join(__dirname, 'dist'),
    publicPath: '/dist/',
    pathinfo: true
  },
  module: {
    loaders: [
      { test: /\.js$/, exclude: /node_modules/, loaders: ['babel'] },
      { test: /\.scss/, exclude: /node_modules/, loaders: ['style', 'css', 'sass'] }
    ]
  },
  plugins: [
    new webpack.NoErrorsPlugin(),
    new webpack.optimize.CommonsChunkPlugin('vendor', 'vendor.bundle.js', Infinity)
  ]
};
Run Code Online (Sandbox Code Playgroud)

这是我运行webpack-dev-server的脚本:

const webpack =require('webpack');
const WebpackDevServer = require('webpack-dev-server'); …
Run Code Online (Sandbox Code Playgroud)

javascript webpack commonschunkplugin

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

如何测试redux-thunk中间件异步函数?

我正在尝试使用mocha,chai和sinon(我的第一次!)测试我的asyn thunk中间件功能.

请考虑我的文件:

ayncActionCreators.js

export const fetchCurrentUser = () => {
   return (dispatch) => {
      setTimeout(dispatch, 100);
   }
};
Run Code Online (Sandbox Code Playgroud)

ayncActionCreators.spec.js

//...
it('Should work', () => {
   const dispatch = sinon.spy();
   const action = fetchCurrentUser();

   action(dispatch);

   expect(dispatch.called).to.be.true;
});
Run Code Online (Sandbox Code Playgroud)

我还没有实现fetchCurrentUser函数 - 只是假设它需要一些"服务器"时间然后它将调用'dispatch()'.

由于异步流,规范失败.如果我在期望之前添加一个101毫秒的setTimeout - 它会通过.

我的代码将使用一些返回promise的DB API,因此async函数最终将如下所示:

//...
return (dispatch) => {
   return dbAPI.fetchUser().then(dispatch(....));
}
Run Code Online (Sandbox Code Playgroud)

所以我试图要求dbAPI并在测试中创建一个sinon.stub().returns(Promise.resolve())并且它也不能正常工作(我认为,因为存根返回一个已解析的promise - 异步函数将像一个同步功能).

任何想法我应该如何测试这样的异步函数?

谢谢,阿米特.

mocha.js sinon chai redux redux-thunk

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

如何使用webpack(sourcemap)获得更易读的bundle.js?


我正在尝试创建我的第一个webpack项目,但我找不到一种方法来将表示输出bundle.js中的模块的数字键更改为描述性字符串,以便在调试器中更容易跟踪它. .

我已经尝试了output.chunkFilename和output.sourceMapFilename但没有成功.

这是我的gulp任务的样子:

gulp.task('webpack', function (done) {
webpack({
    entry: {
        app: paths.src + "/main.js",
        vendor: ['react/addons', 'lodash']
    },
    output: {
        path: paths.dist,
        filename: "bundle.js",
        sourceMapFilename: '[file].js'
    },
    plugins: [
        new webpack.optimize.CommonsChunkPlugin("vendor", 'vendor.bundle.js', Infinity)
    ]
}, function onWebpackComplete(err, stats) {
    if (err) throw new gutil.PluginError("webpack", err);
    done();
});
});
Run Code Online (Sandbox Code Playgroud)

它甚至可能吗?我用错了吗?有没有更好的办法?

谢谢!

javascript commonjs webpack

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

无法比较Immutable-js对象

我试图了解为什么我的简单柴(使用柴不可变)测试失败。

it('should work', () => {
   var currentState = Immutable.fromJS({
     name: 'myName',
     age: 20,
     friends: []
   });

   var newState = currentState.merge({
     name: 'someOtherName',
     age: 30
   });

   expect(newState).to.equal(Immutable.fromJS({
     name: 'someOtherName',
     age: 30,
     friends: []
   }));
});
Run Code Online (Sandbox Code Playgroud)
  • 如果我使用mergeDeep而不是merge-它仍然无法正常工作
  • 如果我比较期望值和实际值的.toJS()推算值(使用lodash isEqual),则可以...

我究竟做错了什么?我想我缺少了一些愚蠢的东西...

谢谢,阿米特。

javascript chai immutable.js chai-immutable

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