我有我的package.json所有devDependencies.
我的理解是,如果我删除依赖项并运行npm prune,node将从中删除模块文件夹node_modules.这似乎是维护我的node_modules文件夹最简单的方法.
来自文档:
修剪
删除无关的包裹
此命令删除"无关"包.
无关的包是父包的依赖项列表中未列出的包.
但是,有时即使在运行后npm prune我仍然有我的模块文件夹node_modules.
为什么会发生这种情况以及删除未使用模块的正确方法是什么?
我们目前正在构建基于木偶的应用程序.基本上,我们有一个木偶应用程序,它上面定义了多个区域.每个区域将充当不同模块的容器以显示其视图.我希望每个模块完全控制它的容器中显示的内容,但我希望应用程序分配这些区域.为简单起见,我们假设每个模块都有一个简单的ItemView.
我正在考虑使用模块视图填充这些区域的两种方法.
第一种方法是,当每个模块初始化时,它将创建其视图,并将调用应用程序以在指定区域中显示其视图,例如:
var app = new Marionette.Application();
app.addRegions({
regionA: "#regionA",
regionB: "#regionB"
});
app.module("moduleA", function(moduleA, app, ...){
moduleA.on("start", function(){
var viewA = new MyViewA();
app.regionA.show(viewA);
}
});
app.module("moduleB", function(moduleB, app, ...){
moduleB.on("start", function(){
var viewB = new MyViewB();
app.regionB.show(viewB);
}
});
Run Code Online (Sandbox Code Playgroud)
第二种方法是每个模块都应该公开一些返回其视图的函数.应用程序将在准备好时调用该函数,并将视图粘贴到指定区域.
我不确定哪种方法更好,并且很乐意听取意见.
RequireJS设置的大多数示例,将配置对象放在main.js入口点,如下所示:
//main.js
require.config({
"paths": {
//libs
"lib1": "assets/js/lib/lib1",
"lib2": "assets/js/lib/lib2",
"lib3": "assets/js/lib/lib3",
"lib4": "assets/js/lib/lib4"
}
});
//start the app
define(["lib1"], function(lib1){/*start the app*/});
Run Code Online (Sandbox Code Playgroud)
我更喜欢将配置对象放在一个单独的文件中,因为随着它的增长,很难在同一个文件中维护.
当我在浏览器中运行它时,以下设置有效,但由于某种原因,我在运行r.js优化器时遇到错误:
//config.js
define({/*all configuration here*/});
//main.js
define(["config", "require"], function(config, require){
requirejs.config(config); //set configuration
require(["app"]); //launch app, where "app" path is defined in config.js
});
Run Code Online (Sandbox Code Playgroud)
当我运行r.js时,我收到以下错误:
*跟踪:main的依赖关系
错误:ENOENT,没有这样的文件或目录'C:\ Work\project\target\app.js*
所以似乎r.js没有得到配置设置,因为它正在寻找app.js作为相对脚本,而不是具有已定义路径的模块.
这是我的build.js文件(appDir,dir和mainConfigFile是相对于build.js文件):
({
appDir: "../src",
baseUrl: ".",
dir: "../target",
mainConfigFile: "../src/main.js",
findNestedDependencies: true,
modules: [
{
name: "main"
}
]
})
Run Code Online (Sandbox Code Playgroud) 我想将Compass添加到我现有的项目中.我想维护我当前的项目结构,看起来像这样(简化):
app/
build/
|-compass/
assets/
|-css/
|-scss
|-js/
|-img/
Run Code Online (Sandbox Code Playgroud)
所以我希望我的所有SASS文件都在\ assets\css\scss下,我想将已编译的CSS文件输出到\ assets\css.
运行:
compass create --bare --sass-dir "assets\css\scss" --css-dir "assets\css"
Run Code Online (Sandbox Code Playgroud)
直接在我的root下创建Compass config.rb文件.
但是,我希望该文件位于\ build\compass下.
我正在尝试使用嵌入式Jetty服务器.我只想根据请求路径将请求映射到不同的servlet.
创建ServletHandler和添加servlet与创建和添加servlet相比有什么区别ServletContextHandler?
例如:
//how is this different...
ServletHandler handler = new ServletHandler();
handler.addServletWithMapping(MyServlet.class, "/path");
//from this?
ServletContextHandler contextHandler = new ServletContextHandler();
contextHandler.addServlet(MyServlet.class, "/path");
Run Code Online (Sandbox Code Playgroud) 我们第一次使用requirejs,而我在构建依赖项时遇到了麻烦.
我已将我的主app.js文件定义为index.html中的data-main属性:
<script data-main="src/app" src="/js/lib/require/require.js"></script>
Run Code Online (Sandbox Code Playgroud)
但是,我有一个文件定义了我所有需要的路径/填充程序配置,我希望它在app.js文件之前运行.我需要它运行,以便我可以在我的app.js中引用配置的路径作为依赖项.
我认为正确的方法是将我的config.js作为数据主.我尝试将config.js设置为依赖,如下所示:
<script type="text/javascript">
var require = {
baseUrl: "/",
deps: ["src/config"]
}
</script>
<!-- data-main is the main js file of the app -->
<script data-main="src/app" src="/js/lib/require/require.js"></script>
Run Code Online (Sandbox Code Playgroud)
但这没有帮助.
有什么建议?
我正在玩Spark(Java Web框架,而不是Apache Spark).
我觉得定义路由和过滤器真的很好很容易,但是我希望在我的路由中应用本机servlet过滤器,似乎无法找到一种方法.
更具体地说,我想使用Jetty的DoSFilter,它是一个servlet过滤器(与Spark Filter定义形成对比).由于Spark使用嵌入式Jetty,我没有web.xml来注册DoSFilter.但是,Spark不会公开服务器实例,所以我找不到以编程方式注册过滤器的优雅方式.
有没有办法将本机servlet过滤器应用于我的路由?
我想把DoSFilter包装在我自己的Spark Filter中,但这似乎是一个奇怪的想法.
我正在使用nginx作为后端服务器的代理.后端服务器还使用nginx并使用ssl_client_certificate和ssl_verify_client指令强制执行客户端证书身份验证.
在我的nginx服务器中,我设置以下内容:
location /proxy {
proxy_pass https://www.backend.com;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_ssl_certificate /etc/nginx/cert/client.crt;
proxy_ssl_certificate_key /etc/nginx/cert/client.key;
}
Run Code Online (Sandbox Code Playgroud)
根据nginx文档.
但是,后端仍然响应400响应代码"No required SSL certificate was sent".
请注意,当使用带有客户端证书的wget向后端服务器发出请求时,我得到一个有效的200 OK响应:
wget --certificate=/etc/nginx/cert/client.crt --private-key=/etc/nginx/cert/client.key https://www.backend.com
Run Code Online (Sandbox Code Playgroud)
我的nginx配置中缺少什么?
我有一个基于RequireJS的单页Marionette应用程序需要支持翻译.
我的目标是为每种语言创建一个字典文件,并根据登录用户的配置加载相关文件.
由于大多数用户将使用英语,我想在构建期间在应用程序中捆绑英语词典(使用r.js).
我写了一个小的Translator模块,它基本上包装了jed.js(我用于i18n的库):
//in myTranslator.js
define(function (require) {
"use strict";
var Jed = require("jed");
var localeData = require("json!locales/en_US.json");
var Translator = function () {
var i18n = new Jed({
"domain": "messages",
"locale_data": localeData
});
return i18n;
};
return Translator;
});
//in app.js
define(function(require){
var Translator = require("myTranslator");
var translator = new Translator();
});
Run Code Online (Sandbox Code Playgroud)
如您所见,语言环境数据是从静态文件加载的.我希望能够将语言环境传递给Translator构造函数,并在此基础上加载正确的JSON文件.
如何将英语JSON与建成项目捆绑在一起?
我开始使用AngularJS,而我正试图将依赖注入包裹起来.具体来说,我试图了解DI与使用RequireJS声明依赖关系之间的差异.
Angular中的DI是否只适用于某些angular.module上定义的"对象"(工厂,服务,模型)?例如,我可以依赖一些外部库,比如使用DI的jQuery吗?
一般来说,RequireJS中的依赖管理和Angular中的DI之间的区别可以这样说:
RequireJS仅在首次需要时加载依赖项(延迟加载)并确保在执行之前存在所有依赖项,而Angular DI允许在运行时轻松更改依赖项,只要它的接口保持不变即可?
最后,DI总是传递依赖的实例吗?每次都是一个新实例,还是一个单例?它可以通过我可以实例化的"类"定义吗?例如,如果我需要将选项传递给构造函数,该怎么办?
Marionette允许您跨单独的文件拆分模块的定义.
是否可以以某种方式从模块的第二部分访问模块的一个部分中定义的私有变量或函数?例如:
//in module1.js
App.module("MyModule", function(MyModule, App, Backbone...){
myPrivateVar = 0;
}
//in module2.js
App.module("MyModule", function(MyModule, App, Backbone...){
var myPrivateFunction = function(){
if (myPrivateVar>0){
//do something
}
}
}
Run Code Online (Sandbox Code Playgroud) javascript ×6
requirejs ×4
amd ×3
backbone.js ×2
marionette ×2
servlets ×2
angularjs ×1
compass-sass ×1
https ×1
java ×1
jetty ×1
js-amd ×1
nginx ×1
node.js ×1
npm ×1
r.js ×1
sass ×1
spark-java ×1
ssl ×1