Обновление 26 сентября 2016 года:
Как следует из ответа Тейтай, вместо установок «типизации», которые мы использовали несколько месяцев назад, теперь мы можем использовать:
npm install --save @types/lodash
Вот некоторые дополнительные ссылки, поддерживающие этот ответ:
Если вы все еще используете установку типирования, см. комментарии ниже (другими) относительно '' '--ambient' '' и '' '--global' ''.
Также, в новом Quick Start, config больше не находится в index.html; теперь он находится в systemjs.config.ts (если используется SystemJS).
Исходный ответ:
Это сработало на моем mac (после установки Angular 2 в соответствии с Быстрый старт ):
sudo npm install typings --global
npm install lodash --save
typings install lodash --ambient --save
Вы можете найти различные файлы, например
Угловая 2 Quickstart использует System.js, поэтому я добавил «map» в config в index.html следующим образом:
System.config({
packages: {
app: {
format: 'register',
defaultExtension: 'js'
}
},
map: {
lodash: 'node_modules/lodash/lodash.js'
}
});
Тогда в моем .ts-коде мне удалось:
import _ from 'lodash';
console.log('lodash version:', _.VERSION);
Редактирование с середины 2016 года:
Поскольку @tibbus упоминает, в некоторых контекстах , вам нужно:
import * as _ from 'lodash';
Если вы начинаете с angular2-seed , и если вы не хотите импортировать каждый раз, вы можете пропустить карту и импортировать шаги и просто uncomment lodash line в tools / config / project.config.ts.
Чтобы мои тесты работали с lodash, мне также пришлось добавить строку в массив файлов в файле karma.conf.js:
'node_modules/lodash/lodash.js',
Я использовал BasicConfigurator , сконфигурированный с MemoryAppender . Это приложение позволяет вам получить доступ к сообщениям в памяти, записанным во время теста.
Следующий код был первоначально найден в архивах списков рассылки apache и должен решить проблему добавления и удаления дополнений log4net в коде
/// <summary>
/// dataLog
/// </summary>
protected static readonly IDeviceCommunicationsLog dataLog =
DeviceCommunicationsLogManager.GetLogger("LIS3.Data");
Each connection adds and removes a file appender programmatically:
/// <summary>
/// add connection specific appender
/// </summary>
void AddAppender()
{
// check if logging is endabled
if( this.IsLoggingEnabled() )
{
try
{
// get the interface
IAppenderAttachable connectionAppender = (IAppenderAttachable)this.DataLog.Logger;
// need some application configuration settings
NameValueCollection appSettings = ConfigurationSettings.AppSettings;
// get the layout string
string log4netLayoutString = appSettings["log4net.LIS3.LayoutString"];
if( log4netLayoutString == null )
{
// use default setting
log4netLayoutString = "%d [%x]%n %m%n %P MessageData}%n%n";
}
// get logging path
string log4netPath = appSettings["log4net.Path"];
if( log4netPath == null )
{
// use default path
log4netPath = ".\\";
}
// create the appender
this.rollingFileAppender = new RollingFileAppender();
// setup the appender
this.rollingFileAppender.MaxFileSize = 10000000;
this.rollingFileAppender.MaxSizeRollBackups = 2;
this.rollingFileAppender.RollingStyle = RollingFileAppender.RollingMode.Size;
this.rollingFileAppender.StaticLogFileName = true;
string appenderPath = LogSourceName + ".log";
// log source name may have a colon - if soreplace with underscore
appenderPath = appenderPath.Replace( ':', '_' );
// now add to log4net path
appenderPath = Path.Combine( log4netPath, appenderPath );
// update file property of appender
this.rollingFileAppender.File = appenderPath;
// add the layout
PatternLayout patternLayout = new PatternLayout( log4netLayoutString );
this.rollingFileAppender.Layout = patternLayout;
// add the filter for the log source
NDCFilter sourceFilter = new NDCFilter();
sourceFilter.StringToMatch = this.LogSourceName;
this.rollingFileAppender.AddFilter( sourceFilter);
// now add the deny all filter to end of the chain
DenyAllFilter denyAllFilter = new DenyAllFilter();
this.rollingFileAppender.AddFilter( denyAllFilter );
// activate the options
this.rollingFileAppender.ActivateOptions();
// add the appender
connectionAppender.AddAppender( this.rollingFileAppender );
}
catch( Exception x )
{
this.ErrorLog.Error( "Error creating LIS3 data log appender for " + LogSourceName, x );
}
}
}
/// <summary>
/// remove connection specific appender
/// </summary>
void RemoveAppender()
{
// check if we have one
if( this.rollingFileAppender != null )
{
// cast to required interface
IAppenderAttachable connectionAppender = (IAppenderAttachable)this.DataLog.Logger;
// remove the appendier
connectionAppender.RemoveAppender( rollingFileAppender );
// set to null
this.rollingFileAppender = null;
}
}