我试图在一个寓言的elmish模板项目中使用寓言powerpack。在编译过程中有一个警告:
warning FABLE: Nested option in option won't work at runtime 编译后的代码(使用测试中的寓言powerpack代码)也不起作用。
守则:
let openCursor(index: Browser.IDBIndex, keyCursor: bool, range: Browser.IDBKeyRange option, direction: DBCursorDirection option, step: uint32 option) =
let range = defaultArg range Unchecked.defaultof<Browser.IDBKeyRange>
let direction = (defaultArg direction DBCursorDirection.Default).ToString()
let step = defaultArg step 1u
let request =
match keyCursor with
| false -> index.openCursor(range, direction) //warning here
| true -> index.openKeyCursor(range, direction)//warning here翻译为:
function openCursor(index, keyCursor, range, direction, step) {
var range_1 = range != null ? range : null;
var direction_1 = Object(__WEBPACK_IMPORTED_MODULE_3__nuget_packages_fable_core_1_2_4_fable_core_Util__["y"/* toString */
])(direction != null ? direction : DBCursorDirection.Default);
var step_1 = step != null ? step : 1;
var request = keyCursor ? index.openKeyCursor(Object(__WEBPACK_IMPORTED_MODULE_3__nuget_packages_fable_core_1_2_4_fable_core_Util__["x"/* some */
])(range_1), direction_1) : index.openCursor(Object(__WEBPACK_IMPORTED_MODULE_3__nuget_packages_fable_core_1_2_4_fable_core_Util__["x"/* some */
])(range_1), direction_1);range_1是空的,没有问题,但是
Object(__WEBPACK_IMPORTED_MODULE_3__nuget_packages_fable_core_1_2_4_fable_core_Util__["x"/* some */])(null) 如果返回未定义(或null?),则返回{}而不是未定义。那就没问题了
克隆powerpack项目并使其工作,openCursor被翻译为:
function openCursor(index, keyCursor, range, direction, step) {
var range_1 = range != null ? range : null;
var direction_1 = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__nuget_packages_fable_core_1_2_0_beta_003_fable_core_Util__["f" /* toString */])(direction != null ? direction : DBCursorDirection.Default);
var step_1 = step != null ? step : 1;
var request = keyCursor ? index.openKeyCursor(range_1, direction_1) : index.openCursor(range_1, direction_1);我可以看到它使用了一个不同的dotnet -寓言(1.2.4来自寓言elmish模板),因此改变了paket.lock降级(1.2.0beta-005从寓言-powerpack),并做了一个dotnet恢复。
现在,它将完全不使用错误进行编译(可能无法使用powerpack使用的寓言版本):
/home/harm/.nuget/packages/fable.react/1.2.1/fable/Fable.Helpers.React.fs /home/harm/.nuget/packages/fable.react/1.2.1/fable/Fable.Helpers.React.fs(588,53):中的错误(588,62)错误FSHARP:类型'ParamList‘未定义。@ ./src/App.fs 5:0-107 @/src/sale.fsproj@ multi (webpack)-dev-server/client?http://localhost:8080 webpack/hot/dev-server ./src/sale.fsproj
克隆寓言编译器并构建它(不生成nuget包,而是一些带有二进制文件的文件夹)。
在链接到构建的寓言powerpack中:
ln -s ../Fable/build/fable ./fable然后尝试构建power (更改了test/Main.fs和Tests.fsproj以使用indexeddb的Program.fs )
dotnet ./fable/dotnet-fable.dll yarn-run pretest当然,这也不起作用:
未找到./src/IndexedDB.fs模块中的错误:错误:无法解决‘/home/伤害/dev/fable powerpack/src’@ ./src/IndexedDB.fs 9:0-102 @/test/Program.fs@./test/Main.fs@. '../../../.nuget/packages/fable.core/1.2.0-beta-003/fable-core/Option‘/Tests.fsproj中的错误 未找到/src/PromiseSeq/Module.fs模块中的错误:错误:无法在'/home/harm/dev/fable-powerpack/src/PromiseSeq‘@ ./src/PromiseSeq/Module.fs中解析’/home/harm/dev/fable-powerpack/src/PromiseSeq‘。99 10:0-99 @/src/PromiseSeq/Extensions.fs@./test/Program.fs@./test/Main.fs@./test/Tests.fsproj
目录~/.nuget/packages/fable.core/1.2.0-beta-003/fable-core/存在,但我想相对路径是不正确的。同样,它从哪里获得1.2.0,寓言构建的寓言核心是版本1.3.0-beta-002,所以即使我使用dotnet-寓言版本1.3.0-beta-002,出于某种原因,它也不使用构建生成的寓言核心来编译。
dotnet-寓言使用paket.lock吗?如果是这样的话,那么为什么不构建Fable提供一个nuget包,因为如果你不想在接下来的3天里忙于复制/链接文件和破坏packet.lock,你就必须安装它。
寓言编译器缺少一些关于如何实际使用它的说明。我可以编译它,但是由于它不生成nuget,所以无法安装它。直接运行二进制文件似乎也不起作用。
是否有一种方法可以使用最新版本从寓言编译器git生成的二进制文件来构建一个项目,并使用它来传输一个项目?
我尝试通过更改paket.dependencies来安装更新的版本:
source https://www.nuget.org/api/v2
nuget Fable.Compiler 1.3.0-beta-002 beta
nuget FSharp.Core
nuget Fable.Core prerelease
nuget Fable.Import.Browser
clitool dotnet-fable 1.3.0-beta-002
group Build
framework: net46
source https://nuget.org/api/v2
nuget FSharp.Core redirects:force, content:none
nuget FAKE然后尝试以下命令
dotnet restore似乎没有做过任何尝试过的事情:
mono .paket/paket.exe update将paket.lock更改为:
dotnet-fable (1.3.0-beta-002) - clitool: true
...
Fable.Compiler (1.3.0-beta-002)
...
Fable.Core (1.3.0-beta-002)不过,不会运行1.3.0:
[harm@localhost fable-powerpack]$ dotnet fable yarn-run pretest
Fable (1.2.0-beta-005) daemon started on port 61225源仍然使用寓言核心1.2.0,因此,它只是为了让它再试一次下面的命令:
dotnet restore现在试着转移:
[harm@localhost fable-powerpack]$ dotnet fable yarn-run pretest
Fable (1.3.0-beta-002) daemon started on port 61225这就产生了警告:
WARNING in ./src/IndexedDB.fs
157:30-34 "export 'Some' was not found in '../../../.nuget/packages/fable.core/1.2.0-beta-003/fable-core/Util'和不起作用的代码:
TypeError: __WEBPACK_IMPORTED_MODULE_1__nuget_packages_fable_core_1_2_0_beta_003_fable_core_Util__.Some is not a constructor at openCursor (file:///home/harm/dev/fable-powerpack/build/tests.bundle.js:3527:191) at IDBObjectStore_openCursorAsync (file:///home/harm/dev/fable-powerpack/build/tests.bundle.js:3668:10) at file:///home/harm/dev/fable-powerpack/build/tests.bundle.js:4685:123 at file:///home/harm/dev/fable-powerpack/build/tests.bundle.js:4642:28 at Object.then (file:///home/harm/dev/fable-powerpack/build/tests.bundle.js:1936:22) at IDBOpenDBRequest.request.onsuccess (file:///home/harm/dev/fable-powerpack/build/tests.bundle.js:3803:36)
message
:
"__WEBPACK_IMPORTED_MODULE_1__nuget_packages_fable_core_1_2_0_beta_003_fable_core_Util__.Some is not a constructor"
stack
:
"TypeError: __WEBPACK_IMPORTED_MODULE_1__nuget_packages_fable_core_1_2_0_beta_003_fable_core_Util__.Some is not a constructor↵ at openCursor (file:///home/harm/dev/fable-powerpack/build/tests.bundle.js:3527:191)↵ at IDBObjectStore_openCursorAsync (file:///home/harm/dev/fable-powerpack/build/tests.bundle.js:3668:10)↵ at file:///home/harm/dev/fable-powerpack/build/tests.bundle.js:4685:123↵ at file:///home/harm/dev/fable-powerpack/build/tests.bundle.js:4642:28↵ at Object.then (file:///home/harm/dev/fable-powerpack/build/tests.bundle.js:1936:22)↵ at IDBOpenDBRequest.request.onsuccess (file:///home/harm/dev/fable-powerpack/build/tests.bundle.js:3803:36)"
__proto__
:
Error仍然顽固地尝试着寓言核心1.2.0
因此,寻找这个版本:
[harm@localhost fable-powerpack]$ grep -rl "1.2.0.beta.003"
obj/fsac.cache
tests/obj/project.assets.json
tests/obj/fsac.cache
build/tests.bundle.jstests/obj/project.assets.json有超过5400条线,所以不会去摆弄那条线。
因此,尝试了以下几点:
[harm@localhost fable-powerpack]$ cd tests/
[harm@localhost tests]$ mono ../.paket/paket.exe update
[harm@localhost tests]$ dotnet restore这似乎解决了这个问题:
[harm@localhost fable-powerpack]$ grep -rl "1.2.0.beta.003"
obj/fsac.cache
tests/obj/fsac.cache
build/tests.bundle.js..。
这似乎使用了最新的寓言,但最新的寓言编译:
function openCursor(index, keyCursor, range, direction, step) {
var range_1 = range != null ? range : null;
var direction_1 = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__nuget_packages_fable_core_1_3_0_beta_002_fable_core_Util__["g" /* toString */])(direction != null ? direction : DBCursorDirection.Default);
var step_1 = step != null ? step : 1;
var request = keyCursor ? index.openKeyCursor(new __WEBPACK_IMPORTED_MODULE_1__nuget_packages_fable_core_1_3_0_beta_002_fable_core_Util__["f" /* Some */](range_1), direction_1) : index.openCursor(new __WEBPACK_IMPORTED_MODULE_1__nuget_packages_fable_core_1_3_0_beta_002_fable_core_Util__["f" /* Some */](range_1), direction_1);与1.2.4相同,因此在运行脚本时出错。
发布于 2017-11-11 02:32:08
已编译的JavaScript中的嵌套选项警告和错误为已解决。
安装paket依赖项是可以做到的(从paket.dependencies获取版本并重新创建paket.lock):
mono .paket/paket.exe update
dotnet restore如果paket更新为您提供超时异常,则可以在paket更新之前尝试此命令:
export PAKET_RESOLVER_TASK_TIMEOUT=-1在这种情况下,您需要在测试指导中再次运行dotnet restore。
https://stackoverflow.com/questions/46932417
复制相似问题