我正在为nodejs应用程序编写一些测试.假设我有一个这样的模块:
module.exports = function myModule(moduleParam) {
var someVar;
....
....
function helper(param) {
return param + someVar;
}
return {
doSomething: function (bar) {
....
....
var foo = helper(bar);
....
....
}
};
};
Run Code Online (Sandbox Code Playgroud)
假设'helper'函数仅在模块中有用,不应暴露给外部.
测试它的"最佳实践"是什么?(当然,我可以测试doSomething函数作为一个整体,但是这样,'helper'函数在特定情况下以'黑盒'的方式进行测试).
我正在使用nodeunit作为测试框架,但是我可以根据需要进行更改.
任何打字稿专家都可以澄清在使用Typescript时何时以及为什么选择AMD vs Common JS进行模块创建?
我的目标是使用Webpack将隔离的组件导出到假定的全局对象中.
<script>
var MyApp = window.MyApp || {};
MyApp.something = MyApp.something || {};
</script>
<script src="my-isolated-module.js"></script>
//
// other modules/components loaded here...
//
<script>
MyApp.something.myIsolatedModule.run();
</script>
Run Code Online (Sandbox Code Playgroud)
在上面的例子中,我假设有一个全局对象/模块,它有一个属性something,它将附加其他模块.所以我想将我的孤立模块附加到全局MyApp.something对象而不破坏任何一个MyApp或MyApp.something.
var webpack = require('webpack');
var UglifyJsPlugin = require('webpack/lib/optimize/UglifyJsPlugin');
module.exports = {
target: 'web',
context: __dirname + '/src/',
entry: './main.jsx',
output: {
path: __dirname + '/dist/',
filename: 'app.bundle.js',
library: 'something',
libraryTarget: 'var'
},
resolve: {
extensions: ['', '.js', '.jsx']
},
module: {
loaders: [ …Run Code Online (Sandbox Code Playgroud) 我正在考虑将一个基于浏览器的大型代码库移到CommonJS(它是一个用TypeScript编写的AngularJS 1.x应用程序).该应用程序具有循环依赖性,因此我认为RequireJS是不可能的.
Browserify如何处理循环依赖?是否存在不同类型的循环依赖关系?或者使用CommonJS/Browserify处理循环依赖的任何提示?
假设我有一个这样的UMD模块(保存在'js/mymodule.js'中):
(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
typeof define === 'function' && define.amd ? define(['exports'], factory) :
(factory((global.mymodule = global.mymodule || {})));
}(this, function (exports) { 'use strict';
function myFunction() {
console.log('hello world');
}
}));
Run Code Online (Sandbox Code Playgroud)
如何在这样的HTML文件中使用此模块?(没有requirejs,commonjs,systemjs等......)
<!doctype html>
<html>
<head>
<title>Using MyModule</title>
<script src="js/mymodule.js"></script>
</head>
<body>
<script>
/* HOW TO USE myFunction from mymodule.js ??? */
</script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
非常感谢您的帮助.
我有一个节点应用程序,我想以标准 ES6 模块格式(即,"type": "module"在package.json, 和 using中)使用它import,export而无需转换为 ES5。但是我想利用一些较旧的库,例如使用 CommonJS /require格式的 express 和 socket.io 。将 CommonJS 模块组合到 ES6 应用程序中的选项是什么(截至 5/2020,Node 12.16.3)?
有没有人使用现有的node.js REPL为自己设置这样的东西?我没想到要快速做到这一点.
我今天这样做的方式是使用emacs和这个:https: //github.com/ivan4th/swank-js
该模块由以下部分组成:
一个SLIME-js插件到emacs,结合js2-mode,让你只需在函数def的主体中的某个地方发出一个CMx,然后关闭函数的字符串到...
用Node.js编写的Swank-js服务器(是的,您可以从本地计算机直接评估到远程进程) - 它接收您评估的函数的字符串并实际上将其删除
整个部分允许您使用浏览器连接到该服务器上的另一个端口,然后让您在该浏览器上操作DOM(这非常了不起但不相关)
我的解决方案在emacs端使用SLIME-js我需要('swank-js')在我的app.js文件上
现在..我有几个关于我的解决方案或其他可能的问题和问题:
Q1:这有点过头了吗?有人有秘密的方式来评估从纳米到他的实时过程的东西吗?
Q2:我不得不改变swank-js评估的方式..它使用了某种黑魔法:
var Script = process.binding('evals').Script;
var evalcx = Script.runInContext;
....
this.context = Script.createContext();
for (var i in global) this.context[i] = global[i];
this.context.module = module;
this.context.require = require;
...
r = evalcx("CODECODE", this.context, "repl");
Run Code Online (Sandbox Code Playgroud)
据我所知,只是将全局变量复制到新的上下文中,并且在eval上,不会更改原始函数定义 - SOOO ..我只是使用简单的"eval"和IT WORKS.
你对此有何评论?
问题3:为了重新评估函数,它需要是一个GLOBAL函数 - 将所有函数定义都设置为全局(类似clojure)是不好的做法?你认为还有另一种方法吗?
我正在研究一个用CommonJS语法编写的角度应用程序,并使用grunt-contrib-requirejs任务的grunt任务将源文件转换为AMD格式并将其编译成一个输出文件.我的目标是使Karma与RequireJS一起工作,并将我的源文件和spec文件保存在CommonJS语法中.
我已经能够通过以下文件结构以AMD格式传递一个简单的测试:
-- karma-test
|-- spec
| `-- exampleSpec.js
|-- src
| `-- example.js
|-- karma.conf.js
`-- test-main.js
Run Code Online (Sandbox Code Playgroud)
和以下文件:
karma.conf.js
// base path, that will be used to resolve files and exclude
basePath = '';
// list of files / patterns to load in the browser
files = [
JASMINE,
JASMINE_ADAPTER,
REQUIRE,
REQUIRE_ADAPTER,
'test-main.js',
{pattern: 'src/*.js', included: false},
{pattern: 'spec/*.js', included: false}
];
// list of files to exclude
exclude = [];
// test results reporter to use
// possible …Run Code Online (Sandbox Code Playgroud) 我使用Webpack来构建我的网站的JavaScript.
一切都很完美,但我想将require调用到模板中(动态添加).
我希望能够在构建之后需要一个模块.(require未定义到全局上下文中).
可能吗 ?
谢谢
在反应文档中,我发现了这种导入PureRenderMixin的方法
var PureRenderMixin = require('react/addons').addons.PureRenderMixin;
Run Code Online (Sandbox Code Playgroud)
如何以ES6风格重写.我唯一能做的就是:
import addons from "react/addons";
let PureRenderMixin = addons.addons.PureRenderMixin;
Run Code Online (Sandbox Code Playgroud)
我希望有更好的方法.
commonjs ×10
javascript ×7
node.js ×3
amd ×2
browserify ×2
ecmascript-6 ×2
module ×2
requirejs ×2
webpack ×2
build ×1
es6-modules ×1
eval ×1
html ×1
karma-runner ×1
reactjs ×1
require ×1
swank ×1
systemjs ×1
typescript ×1
unit-testing ×1