众所周知,Angular 4+应用程序是使用TypeScript构建的。
当我们在命令行中为这些应用程序键入ng serve
时,应用程序将在浏览器中运行并响应我们的更改,而不会在我们的项目中创建任何.js
个文件。
假设我有一个文件myscript.ts
,它存在于Angular应用程序之外。如何为此创建监视方案,以便文件在Node中运行,但我不必创建新文件?
显然,案例不是必须将文件编译成JavaScript
文件。我们可以看到运行ng serve
时没有创建新文件。
答案 0 :(得分:2)
显然没有在我们的项目中创建任何
public class MyAdapter extends RecyclerView.Adapter<MyHolder> { Context c; ArrayList<Article> articles; public MyAdapter(Context c, ArrayList<Article> articles) { this.c = c; this.articles = articles; } @Override public MyHolder onCreateViewHolder(ViewGroup parent, int viewType) { View v= LayoutInflater.from(c).inflate(R.layout.model,parent,false); return new MyHolder(v); } @Override public void onBindViewHolder(MyHolder holder, int position) { Article article=articles.get(position); holder.titleTxt.setText(article.getTitle()); holder.descTxt.setText(article.getDescription()); holder.dateTxt.setText(article.getDate()); holder.gimage.setImageURI(Uri.parse(article.getImage())) ; } @Override public int getItemCount() { return articles.size(); } }
个文件。
有时JS只需要存在于内存中,因此不一定在文件系统上创建实际的public class RSSParser extends AsyncTask<Void,Void,Boolean> {
Context c;
InputStream is;
RecyclerView rv;
ProgressDialog pd;
ArrayList<Article> articles=new ArrayList<>();
public RSSParser(Context c, InputStream is, RecyclerView rv) {
this.c = c;
this.is = is;
this.rv = rv;
}
@Override
protected void onPreExecute() {
super.onPreExecute();
pd=new ProgressDialog(c);
pd.setTitle("Parse data");
pd.setMessage("Parsing data...Please wait");
pd.show();
}
@Override
protected Boolean doInBackground(Void... params) {
return this.parseRSS();
}
@Override
protected void onPostExecute(Boolean isParsed) {
super.onPostExecute(isParsed);
pd.dismiss();
if(isParsed)
{
//Bind
rv.setAdapter(new MyAdapter(c,articles));
}else {
Toast.makeText(c,"Unable To Parse", Toast.LENGTH_SHORT).show();
}
}
private Boolean parseRSS()
{
try
{
XmlPullParserFactory factory=XmlPullParserFactory.newInstance();
XmlPullParser parser=factory.newPullParser();
parser.setInput(is, null);
int event=parser.getEventType();
String value=null;
articles.clear();
Article article=new Article();
do {
String name=parser.getName();
switch (event)
{
case XmlPullParser.START_TAG:
if(name.equals("item"))
{
article=new Article();
}
break;
case XmlPullParser.TEXT:
value=parser.getText();
break;
case XmlPullParser.END_TAG:
if(name.equals("title"))
{
article.setTitle(value);
}
else if(name.equals("description"))
{
article.setDescription(value);
}else if(name.equals("pubDate"))
{
article.setDate(value);
}else if(name.equals("date"))
{
article.setDate(value);
}else if(name.equals("image"))
{
article.setImage(value) ;
}
if(name.equals("item"))
{
articles.add(article);
}
break;
}
event=parser.next();
}while (event != XmlPullParser.END_DOCUMENT);
return true;
} catch (XmlPullParserException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return false;
}
}
文件,但编译器正在进行将.js
文件转换为JS的工作。 ,这就是为浏览器提供的服务。浏览器只运行JavaScript。但是,为了使其更加不透明,浏览器可以处理language-ext,将正在运行的JavaScript映射回任何原始源文件(在本例中为.js
文件),因此在您的开发控制台中它看起来很像浏览器正在运行TypeScript,但实际上它正在运行映射到原始TypeScript源文件的JavaScript。
如何为此创建监视方案,以便文件在Node中运行,但我不必创建新文件?
您可以使用source maps。来自文档:
TypeScript Node 的工作原理是为
.ts
注册TypeScript编译器 和.ts
扩展名(.tsx?
时)。当node.js有一个 扩展注册(通过.jsx?
),它将使用 内部扩展用于模块解析。当扩展名是 node.js不知道,它将文件处理为allowJs == true
(JavaScript)。