小编Lou*_*uis的帖子

gulp.js + browserify:动态生成特定于开发的文件

我有一个应用程序,其中包含一些特定于开发的调试代码.目前,所有开发代码都由dev在文件顶部调用的变量保护.这是我的应用程序的一个示例:

var dev = true;

if (dev) {
  console.log("Hello developer");
} else {
  console.log("Hello production");
}
Run Code Online (Sandbox Code Playgroud)

当我去部署我的应用程序时,我必须手动将dev变量形式从true更改为false.这很糟糕.

我正在从手工构建的迁移到gulp.js,我希望干净地解决这个开发与生产构建问题.我正在考虑以下事项:

// Inside main.js
var dev = require('./isdev');
if (dev) //...

// Inside isdev.js:
module.exports = true;
Run Code Online (Sandbox Code Playgroud)

现在,当我为生产构建时false,不想手动设置dev标志,我想将isdev.js替换module.exports = true;module.exports = false;.我的具体问题是,如何自动gulp development生成gulp,以便生成一个文件dev = truegulp production生成一个文件dev = false.

node.js browserify gulp

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

Node.js需要脚本但不运行它

在Node.js中,当你这样做

var otherscript = require('otherscript');
Run Code Online (Sandbox Code Playgroud)

它根据需要运行脚本

我想知道是否有办法在不运行脚本的情况下"需要"脚本,以便您可以在以后运行它.

有什么理由不是吗?

require node.js

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

CELERY_ALWAYS_EAGER 好像没有效果

我有一个 Django + Celery 设置,可以在使用 RabbitMQ 的生产中正常工作。

AFAIK,在本地 django 设置中设置CELERY_ALWAYS_EAGER为应该就足够了True,以避免设置 RabbitMQ 进行开发。我已经这样做了,但是在任务上调用 .delay() 时,我得到:

Traceback (most recent call last):
  File "lib/python2.7/site-packages/django/core/handlers/base.py", line 132, in get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "lib/python2.7/site-packages/django/views/generic/base.py", line 71, in view
    return self.dispatch(request, *args, **kwargs)
  File "lib/python2.7/site-packages/django/views/generic/base.py", line 89, in dispatch
    return handler(request, *args, **kwargs)
  File "lib/python2.7/site-packages/django/views/generic/edit.py", line 215, in post
    return self.form_valid(form)
  File "app/web/views.py", line 188, in form_valid
    form.send_email()
  File "app/web/forms.py", line 17, in send_email
    send_email.delay(mail, recipients, 'Contact %s' % …
Run Code Online (Sandbox Code Playgroud)

django celery

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

如何对无法使用CELERY_ALWAYS_EAGER = True运行的任务进行单元测试?

在我的django项目中,我有一些celery任务应该在一定时间后执行(在测试模式下,等待时间设置为几秒钟).执行这些任务后,它们将更改某些实体状态.我已经编写了测试,以便在安排任务后立即检查这些状态.

我尝试用CELERY_ALWAYS_EAGER = True我的django单元测试来测试芹菜任务.但是,使用该设置,它等待在本地执行任务并返回结果.所以我之前的测试代码因此而中断.

让我举一个更具体的例子.假设我有一个电子商务平台的订单系统.当买家下订单时,会创建芹菜任务以检查订单是否在24小时内成功付款.如果没有付款,则应取消订单.在测试模式下,我可以倒计时为20秒而不是24小时.但是使用django单元测试,如果我使用CELERY_ALWAYS_EAGER = True,则立即执行此celery任务,以便始终取消订单.如何测试在时间限制(20s)内成功付款的情况?

有谁知道如何测试不能立即执行的芹菜任务?

unit-testing celery

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

禁用进度输出 aws s3 同步而不禁用所有输出

可能是一个愚蠢的问题,但有什么方法可以禁用

Completed 1 of 12 part(s) with 11 file(s) remaining...
Run Code Online (Sandbox Code Playgroud)

使用aws s3 sync命令(来自 aws cli 工具)的进度输出。

我知道有一个--quiet选项,但我不想使用它,因为我仍然想要Upload...我的日志文件中的详细信息。

不是大问题,但会在日志文件中造成混乱,例如:

Completed 1 of 12 part(s) with 11 file(s) remaining^Mupload: local/file to s3://some.bucket/remote/file
Run Code Online (Sandbox Code Playgroud)

^M控制字符在哪里。

amazon-s3 amazon-web-services aws-cli

5
推荐指数
3
解决办法
4612
查看次数

Babel编译的JS无法导入相对路径

我有我正在写在ES2015并用巴别6. transpiling的ES2015源代码是在NPM包/src,分成模块/src/core,/src/commands等.因为它是一个CLI工具,所以入口点在/src/bin/app.js.如果我运行babel-node src/bin/app.js它按预期工作.

理想情况下,我想全局安装此工具(如grunt-cli),因此我将整个包转换为单个有效的JS(ES5)文件babel src -o /lib/app.js.但是,如果我尝试运行该文件,则会尝试从相对路径中请求模块时出现错误,并且无法找到这些模块,因为它们都已合并到app.js.错误是:

$ node_modules/babel-cli/bin/babel-node.js lib/app
module.js:328
    throw err;
    ^

Error: Cannot find module '../commands/index'
    at Function.Module._resolveFilename (module.js:326:15)
    at Function.Module._load (module.js:277:25)
    at Module.require (module.js:354:17)
    at require (internal/module.js:12:17)
    at Object.<anonymous> (/usr/local/lib/node_modules/app/lib/app.js:19:14)
    at Module._compile (module.js:398:26)
    at Module._extensions..js (module.js:405:10)
    at Object.require.extensions.(anonymous function) [as .js] (/Users/me/dev/app/node_modules/babel-register/lib/node.js:138:7)
    at Module.load (module.js:344:32)
    at Function.Module._load (module.js:301:12)
Run Code Online (Sandbox Code Playgroud)

.babelrc只是:

{
  "presets": ["es2015"]
}
Run Code Online (Sandbox Code Playgroud)

这应该工作,还是我需要更多配置Babel?备份计划是简单地将整个/src文件夹转换为/lib并发布所有内容,但单个文件会更好.

javascript node.js babeljs

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

如何防止 Mocha 捕获未处理的异常?

我正在为一个库编写一个测试套件,该套件执行处理未由catch语句处理的异常。该库侦听error滴到全局范围内的事件(例如window.addEventListener("error", ...))。

但是,如果我想测试它是否真的能够检测到未处理的异常,我不能,因为 Mocha 将此类异常视为测试失败。我不能使用像断言expect(foo).to.throw,因为如果我使用这些,那么异常被捕获expect,不再一个未处理的异常:它不会引发全球的听众,我的图书馆安装和我想测试。

我试过了,allowUncaught但这并没有解决问题。这是一个重现问题的示例测试:

<!DOCTYPE html>
<html>
  <head>
    <meta http-equiv="Content-Type" content="text/xhtml; charset=utf-8"/>
    <link href="node_modules/mocha/mocha.css" type="text/css" media="screen" rel="stylesheet" />
    <script src="node_modules/mocha/mocha.js"></script>
  </head>
  <body>
    <div id="mocha"></div>
    <script>
      mocha.setup('bdd');
      mocha.allowUncaught();

      it("should be fine", function (done) {
        // Simulate an error thrown by asynchronous code.
        setTimeout(function () {
          throw new Error("error");
        }, 100);

        // My actual error handler is bigger than this. This is …
Run Code Online (Sandbox Code Playgroud)

javascript mocha.js addeventlistener

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

如何在单元测试运行中初始化全局变量?

我知道全局变量很糟糕,但我想用一个.

摘自package.json:

"scripts": {
  "start": "nodemon jobsServer.js",
  "test": "cross-env NODE_ENV=test ./node_modules/.bin/istanbul cover -x \"**/*.spec.js\" ./node_modules/mocha/bin/_mocha -- jobs js --recursive -R spec"
},
Run Code Online (Sandbox Code Playgroud)

jobsServer.js:

global.appPath = require('app-root-path');
// more code here
Run Code Online (Sandbox Code Playgroud)

现在我希望能够在应用程序的任何位置访问appPath.

当我运行npm start它时,它会选择全局变量,我很高兴.

但是当我运行npm test它时不会加载全局(因为全局是在服务器文件中定义的),因此对appPath的所有引用都会中断.

我不想做:

const appPath = require('app-root-path');
Run Code Online (Sandbox Code Playgroud)

在每个单独的.spec.js测试文件中.

如何为每个spec文件加载全局变量?

javascript mocha.js node.js

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

防止jsdoc输出中的全局变量

我目前用jsdoc记录我的JS文件,但是我遇到了一些麻烦.我有2个文件,file1.jsfile2.js(而不是他们的真实姓名很明显).这两个文件都包含许多我在jsdoc样式中记录的函数.当我同时在两个文件上运行jsdoc时,输出是一个全局函数列表及其描述.功能实际位于何处(无论是在file1.js还是file2.js)中没有区别.有没有什么方法可以创建这种区别,以便为我的文档提供更好的结构?

javascript jsdoc

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

使用唯一 ID 分配 WebSocket 和 net.Socket

我希望为 Websockets 和 net.Sockets 分配唯一标识符,因此当接收到消息时,客户端由附加到套接字的标识符标识。

以前的研究:

对于 Websocket:

根据thisthis,需要以下内容:

const app = express();
const server = http.createServer(app);
const wss = new WebSocket.Server({ server });
wss.on('connection', (ws) => {
   ws.id = uuid.v4(); // This is the relevant line of code
   ws.on('message', (msg: string) => {
   ...
   }
});
Run Code Online (Sandbox Code Playgroud)

对于 net.Socket:

完全相同 - 根据this,需要以下内容:

var server = net.createServer();

server.on('connection', function(conn) {
    conn.id = uuid.v4(); // This is the relevant line of code
    conn.on('data', function(data) {
    ... …
Run Code Online (Sandbox Code Playgroud)

sockets websocket node.js typescript

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