我有一个应用程序,其中包含一些特定于开发的调试代码.目前,所有开发代码都由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 = true并gulp production生成一个文件dev = false.
在Node.js中,当你这样做
var otherscript = require('otherscript');
Run Code Online (Sandbox Code Playgroud)
它根据需要运行脚本
我想知道是否有办法在不运行脚本的情况下"需要"脚本,以便您可以在以后运行它.
有什么理由不是吗?
我有一个 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任务应该在一定时间后执行(在测试模式下,等待时间设置为几秒钟).执行这些任务后,它们将更改某些实体状态.我已经编写了测试,以便在安排任务后立即检查这些状态.
我尝试用CELERY_ALWAYS_EAGER = True我的django单元测试来测试芹菜任务.但是,使用该设置,它等待在本地执行任务并返回结果.所以我之前的测试代码因此而中断.
让我举一个更具体的例子.假设我有一个电子商务平台的订单系统.当买家下订单时,会创建芹菜任务以检查订单是否在24小时内成功付款.如果没有付款,则应取消订单.在测试模式下,我可以倒计时为20秒而不是24小时.但是使用django单元测试,如果我使用CELERY_ALWAYS_EAGER = True,则立即执行此celery任务,以便始终取消订单.如何测试在时间限制(20s)内成功付款的情况?
有谁知道如何测试不能立即执行的芹菜任务?
可能是一个愚蠢的问题,但有什么方法可以禁用
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控制字符在哪里。
我有我正在写在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并发布所有内容,但单个文件会更好.
我正在为一个库编写一个测试套件,该套件执行处理未由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) 我知道全局变量很糟糕,但我想用一个.
摘自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文件加载全局变量?
我目前用jsdoc记录我的JS文件,但是我遇到了一些麻烦.我有2个文件,file1.js并file2.js(而不是他们的真实姓名很明显).这两个文件都包含许多我在jsdoc样式中记录的函数.当我同时在两个文件上运行jsdoc时,输出是一个全局函数列表及其描述.功能实际位于何处(无论是在file1.js还是file2.js)中没有区别.有没有什么方法可以创建这种区别,以便为我的文档提供更好的结构?
我希望为 Websockets 和 net.Sockets 分配唯一标识符,因此当接收到消息时,客户端由附加到套接字的标识符标识。
以前的研究:
对于 Websocket:
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) node.js ×5
javascript ×4
celery ×2
mocha.js ×2
amazon-s3 ×1
aws-cli ×1
babeljs ×1
browserify ×1
django ×1
gulp ×1
jsdoc ×1
require ×1
sockets ×1
typescript ×1
unit-testing ×1
websocket ×1