一个项目高星还是有其道理的
我怎么记得它只有一个WPF版本
原来还有Vue 和 Android
Android就是电视机盒子的大屏幕版本
或者平板电脑版本
javascript
npm error code ENOTFOUND
npm error syscall getaddrinfo
npm error errno ENOTFOUND
npm error network request to https://registry.nlark.com/y18n/download/y18n-5.0.8.tgz failed, reason: getaddrinfo ENOTFOUND registry.nlark.com
npm error network This is a problem related to network connectivity.
npm error network In most cases you are behind a proxy or have bad network settings.
查看npm镜像
cpp
npm config get registry
切官方(不是必须)
cpp
npm config set registry https://registry.npmjs.org/
或者换用淘宝镜像(有时候更稳定):(不是必须)
cpp
npm config set registry https://registry.npmmirror.com
清除(更不是必须)
css
npm cache clean --force
npm install
nlark 连不上的问题

这会打印出谁依赖了 y18n(比如可能是 gulp、webpack、jest 或其他构建工具的子依赖)。
另外你的日志里还出现了两个 deprecated 警告:
node-sass@4.14.1--- 这个包已经很老了,官方建议换成sass(Dart Sass)core-js@2.6.12--- 这通常是node-sass或其他老包间接依赖的
如果你跑 npm ls y18n 把结果贴出来,我可以帮你精确定位到是哪一个。
cpp
npm ls y18n
y18n 包的问题
cpp
npm warn Unknown user config "ELECTRON_MIRROR". This will stop working in the next major version of npm. See `npm help npmrc` for supported config options.
npm warn Unknown user config "ELECTRON_BUILDER_BINARIES_MIRROR". This will stop working in the next major version of npm. See `npm help npmrc` for supported config options.
jvedio-web@0.1.0 H:\
`-- (empty)
关键结论
npm ls y18n 输出 (empty),说明 node_modules 里确实没装成功,所以依赖树是空的。
但 package-lock.json 里大概率已经写死了 y18n@5.0.8 的下载地址为 https://registry.nlark.com/y18n/download/y18n-5.0.8.tgz。npm install 时会优先按锁文件里的 resolved 地址去下载,直接忽略你全局设的 registry。 这就是为什么你设了 npmmirror 还是去找 nlark。
解决方法
下载源码时,下载了package-lock ,先清掉

安装试用:npm install --legacy-peer-deps

个人问题 sass太旧,太多其他项目(你可能不会有这个问题)
css
del package-lock.json
rmdir /s /q node_modules
npm uninstall node-sass
npm install sass --save-dev
npm install --legacy-peer-deps
好吧,想多了,真的只有WPF版本
没有vue,Vue 的含量只有0.5%

先实现简单化全盘搜索-- 无编译,纯代码
不是一个真实项目,或者二次修改,因为无法验证,就是纯代码输出
cs
/// <summary>
/// 搜索
/// </summary>
/// <returns></returns>
public async Task<List<string>> GetSearchCandidate()//异步,(可能开多个主线程)
{
return await Task.Run(() => {
SearchField searchType = (SearchField)SearchSelectedIndex;
string field = searchType.ToString();
List<string> result = new List<string>();
if (string.IsNullOrEmpty(SearchText))
return result;
//做一个外部扩展类,Video 的外部阔咋和
SelectWrapper<Video> wrapper = new SelectWrapper<Video>();
SetSortOrder(wrapper); // 按照当前排序
wrapper.Eq("metadata.DBId", ConfigManager.Main.CurrentDBId).Eq("metadata.DataType", 0);
SelectWrapper<Video> selectWrapper = GetSearchWrapper(searchType);
if (selectWrapper != null)
wrapper.Join(selectWrapper);
//很粗暴的 SQL 拼装
string sql = $"SELECT DISTINCT {field} FROM metadata_video " +
"JOIN metadata " +
"on metadata.DataID=metadata_video.DataID ";
if (ExtraWrapper != null) {
wrapper.Join(ExtraWrapper);
if (!string.IsNullOrEmpty(ExtraWrapper.ExtraSql))
sql += ExtraWrapper.ExtraSql;
}
if (FilterWrapper != null) {
wrapper.Join(FilterWrapper);
if (!string.IsNullOrEmpty(FilterSQL))
sql += FilterSQL;
}
if (searchType == SearchField.ActorName)
sql += ActorMapper.SQL_JOIN_ACTOR;
else if (searchType == SearchField.LabelName)
sql += VideoMapper.SQL_JOIN_LABEL;
string condition_sql = wrapper.ToWhere(false) + wrapper.ToOrder()
+ $" LIMIT 0,{SEARCH_CANDIDATE_MAX_COUNT}";
if (searchType == SearchField.Genre) {
// 类别特殊处理
string genre_sql = $"SELECT {field} FROM metadata_video " +
"JOIN metadata " +
"on metadata.DataID=metadata_video.DataID ";
List<Dictionary<string, object>> list = metaDataMapper.Select(genre_sql);
if (list != null && list.Count > 0)
SetGenreCandidate(field, list, ref result);
} else {
List<Dictionary<string, object>> list = metaDataMapper.Select(sql + condition_sql);
if (list != null && list.Count > 0) {
foreach (Dictionary<string, object> dict in list) {
if (!dict.ContainsKey(field))
continue;
string value = dict[field].ToString();
if (string.IsNullOrEmpty(value))
continue;
result.Add(value);
}
}
}
return result;
});
}
先实现插件管理-- 无编译,纯代码
源码里这个插件系统主要分两类:信息同步(爬虫)插件 和皮肤插件,不是一个统一的 DLL 插件加载机制。
上面需要的搜索代码并不存在,可能放在插件里面
而C#的插件系统是如何实现呢:
- 插件目录与清单 :根目录是
plugins,下面分crawlers和themes;远程插件列表地址是 GitHub Pages 上的pluginlist.json。PathManager.csUrlManager.cs - 信息同步插件 :每个爬虫插件目录包含 DLL 和元数据 JSON。启动时
CrawlerManager扫描plugins/crawlers,解析元数据、加载 DLL,并读取插件启用状态;插件 DLL 通过反射加载。CrawlerManager.cs - 运行时调用 :刮削影片信息时,程序按插件是否启用、服务器配置和影片类型筛选爬虫,再调用插件的
GetInfo。VideoDownLoader.cs爬虫的 URL、Headers、Cookies 等服务器配置则单独保存到应用配置中。ServerConfig.cs - 皮肤插件 :主要是目录资源和
main.json元数据,由主题模块读取并应用,不像爬虫那样加载 DLL。插件文档 - 管理界面与更新 :插件窗口由
SuperControls.Style.Plugin.Window_Plugin提供,主程序负责配置插件目录、远程列表 URL,以及下载或删除完成后的刷新回调。Window_Main.xaml.cs爬虫插件删除会先加入待删除列表,重启时再清理。WindowStartUp.xaml.cs
cs
//并没有调试,所以即使源码
//还是需要运行时调试,或者执行后才知道哪些数据对不上,否则老是提示运行错误,或者错误异常
//就会很烦,并不是这个软件不能用,或者架构不好,或者C#就是不好用
//能Debug得代码,就是在AI时代也是好代码
参考::其实 wpf 是比android 要开发得快,和有一些IDE 编辑工具优势
2011年春
但是工具真不算什么,底层框架才是核心
但是两者底层其实都是xml
乌龟 vs 王八
2者 层次真没什么不同不同,不可拿来比较<---这句话比较禅,观点与角度问题,不同人有不同理解
写了1年android,java的,最近同时写了1个月wpf,一开始不习惯wpf的布局,控件总是跑了,1个月后喜欢上了如此人性化的布局
谁TMD还跟我说JAVA好,用android开发快,我跟他急
右对齐(Layout)

下对齐

出来效果,截图还不算特别明显,无论窗口拖多宽,还是能保证界面结构,请留意输入框和返回按钮的不同
最最关键的是,在控件周围原点,点下鼠标即可实现布局
绝对相信meego系统的开发比较快,求Meego开发者证明,再求android系统开发框架
(最终他这个项目也没有实现Android 版本)

