npm - 使用 requirejs 在 Aurelia v1 应用程序中捆绑 pouchDB js 库
问题描述
我在使用内置的 requirejs 捆绑器/模块加载器在 Aurelia v1 应用程序中捆绑 pouchDB js 库时遇到错误。
我在一个最小的 Aurelia 应用程序中隔离了这个问题:这些是重现错误的步骤:
- 使用 aurelia-cli v2.0.3 创建一个最小的 aurelia v1 应用程序。
npm --version
6.14.15
sudo npm install --global aurelia-cli
au new
✔ Please name this new project: › test
✔ Would you like to use the default setup or customize your choices? › Custom Project
✔ App or Plugin? › App
✔ Which bundler would you like to use? › CLI's built-in bundler with an AMD module loader
✔ Which AMD module loader would you like to use? › RequireJS
✔ What platform are you targeting? › Web
✔ What transpiler would you like to use? › Babel
✔ How would you like to setup your HTML template? › Minified with htmlmin
✔ What css preprocessor would you like to use? › Sass
✔ Do you want to add PostCSS processing › Yes
✔ Which unit test runner would you like to use? › None
✔ Would you like to configure e2e integration testing? › None
✔ What is your default code editor? › None
✔ Which features do you want to scaffold into your project? › Minimum
✔ Would you like to add a Dockerfile? › No
[makes] Project test has been created.
- 进入项目目录,启动aurelia bundler
cd test
au run --env dev --port 9000 --watch
最小的 aurelia 应用程序成功显示在 localhost:9000
- 安装 pouchDB 的浏览器优化预设
npm install pouchdb-browser
- 在 src/app.js 文件中导入并实例化 PounchDB 类
import PouchDB from "pouchdb-browser";
export class App {
message = 'Hello World!';
constructor() {
this.db = new PouchDB("test");
}
}
一旦在项目中导入 pouchDB 类,Aurelia 捆绑器就会启动并重新捆绑所有添加的依赖项,而不会引发错误
au run --env dev --port 9000 --watch
Local aurelia-cli v2.0.3
Starting 'clean'...
Finished 'clean'
Starting 'readProjectConfiguration'...
INFO [Bundle] Manually adding package: 2.3.3 aurelia-bootstrapper
INFO [Bundle] Manually adding package: 1.2.1 aurelia-loader-default
INFO [Bundle] Manually adding package: 1.8.1 aurelia-pal-browser
INFO [Bundle] Manually adding package: 1.0.0 aurelia-testing
INFO [Bundle] Manually adding package: 2.0.16 text
Finished 'readProjectConfiguration'
Starting 'processMarkup'...
Starting 'processJson'...
Starting 'processCSS'...
Starting 'copyFiles'...
Starting 'configureEnvironment'...
Finished 'copyFiles'
Finished 'processJson'
Finished 'processCSS'
Finished 'processMarkup'
Finished 'configureEnvironment'
Starting 'buildJavaScript'...
Finished 'buildJavaScript'
Starting 'writeBundles'...
INFO [Bundler] Tracing files ...
INFO [Bundler] Auto tracing package: 1.0.3 aurelia-event-aggregator
INFO [Bundler] Auto tracing package: 1.3.1 aurelia-framework
INFO [Bundler] Auto tracing package: 1.4.0 aurelia-history-browser
INFO [Bundler] Auto tracing package: 1.0.2 aurelia-loader
INFO [Bundler] Auto tracing package: 1.1.1 aurelia-logging-console
INFO [Bundler] Auto tracing package: 1.0.7 aurelia-metadata
INFO [Bundler] Auto tracing package: 1.8.2 aurelia-pal
INFO [Bundler] Auto tracing package: 1.3.4 aurelia-polyfills
INFO [Bundler] Auto tracing package: 1.5.3 aurelia-templating-binding
INFO [Bundler] Auto tracing package: 1.13.1 aurelia-templating-resources
INFO [Bundler] Auto tracing package: 1.4.0 aurelia-templating-router
INFO [Bundler] Auto tracing package: 7.2.2 pouchdb-browser
INFO [Bundler] Auto tracing package: 0.0.1 argsarray
INFO [Bundler] Auto tracing package: 2.5.4 aurelia-binding
INFO [Bundler] Auto tracing package: 1.5.2 aurelia-dependency-injection
INFO [Bundler] Auto tracing package: 1.2.1 aurelia-history
INFO [Bundler] Auto tracing package: 1.5.2 aurelia-logging
INFO [Bundler] Auto tracing package: 1.1.7 aurelia-path
INFO [Bundler] Auto tracing package: 1.7.1 aurelia-router
INFO [Bundler] Auto tracing package: 1.3.3 aurelia-task-queue
INFO [Bundler] Auto tracing package: 1.10.4 aurelia-templating
INFO [Bundler] Auto tracing package: 3.3.0 events
INFO [Bundler] Auto tracing package: 3.3.0 immediate
INFO [Bundler] Auto tracing package: 2.0.4 inherits
INFO [Bundler] Auto tracing package: 3.0.1 spark-md5
INFO [Bundler] Auto tracing package: 8.1.0 uuid
INFO [Bundler] Auto tracing package: 1.0.3 vuvuzela
INFO [Bundler] Auto tracing package: 1.3.2 aurelia-route-recognizer
INFO [Bundler] Auto stubbing module: crypto
INFO [Bundler] Auto tracing package: 1.0.1 browserify-cipher
INFO [Bundler] Auto tracing package: 4.2.1 browserify-sign
INFO [Bundler] Auto tracing package: 4.0.4 create-ecdh
INFO [Bundler] Auto tracing package: 1.2.0 create-hash
INFO [Bundler] Auto tracing package: 1.1.7 create-hmac
INFO [Bundler] Auto tracing package: 5.0.3 diffie-hellman
INFO [Bundler] Auto tracing package: 3.1.2 pbkdf2
INFO [Bundler] Auto tracing package: 4.0.3 public-encrypt
INFO [Bundler] Auto tracing package: 2.1.0 randombytes
INFO [Bundler] Auto tracing package: 1.0.4 randomfill
INFO [Bundler] Auto tracing package: 5.2.0 bn.js
INFO [Bundler] Auto tracing package: 1.2.0 browserify-aes
INFO [Bundler] Auto tracing package: 1.0.2 browserify-des
INFO [Bundler] Auto tracing package: 1.0.4 cipher-base
INFO [Bundler] Auto tracing package: 6.5.4 elliptic
INFO [Bundler] Auto tracing package: 1.0.3 evp_bytestokey
INFO [Bundler] Auto tracing package: 1.3.5 md5.js
INFO [Bundler] Auto tracing package: 3.6.0 readable-stream
INFO [Bundler] Auto tracing package: 2.0.2 ripemd160
INFO [Bundler] Auto tracing package: 5.1.2 safe-buffer
INFO [Bundler] Auto tracing package: 2.4.11 sha.js
INFO [Bundler] Auto tracing package: 1.1.0 brorand
INFO [Bundler] Auto tracing package: 4.1.0 browserify-rsa
INFO [Bundler] Auto tracing package: 5.7.1 buffer
INFO [Bundler] Auto tracing package: 1.0.1 des.js
INFO [Bundler] Auto tracing package: 3.1.0 hash-base
INFO [Bundler] Auto tracing package: 4.0.1 miller-rabin
INFO [Bundler] Auto tracing package: 5.1.6 parse-asn1
INFO [Bundler] Auto stubbing module: stream
INFO [Bundler] Auto tracing package: 1.3.0 string_decoder
INFO [Bundler] Auto tracing package: 1.5.1 base64-js
INFO [Bundler] Auto tracing package: 1.0.3 buffer-xor
INFO [Bundler] Auto tracing package: 1.1.7 hash.js
INFO [Bundler] Auto tracing package: 1.0.1 hmac-drbg
INFO [Bundler] Auto tracing package: 1.2.1 ieee754
INFO [Bundler] Auto tracing package: 1.0.1 minimalistic-assert
INFO [Bundler] Auto tracing package: 1.0.1 minimalistic-crypto-utils
INFO [Bundler] Auto tracing package: 1.0.2 util-deprecate
INFO [Bundler] Auto tracing package: 5.4.1 asn1.js
INFO [Bundler] Auto tracing package: 2.1.2 safer-buffer
INFO [Bundle] Writing app-bundle.js...
INFO [Bundle] Writing vendor-bundle.js...
Finished 'writeBundles'
但是,该应用程序现在无法加载,并且 Web 控制台上出现以下错误
...
Uncaught ReferenceError: exports is not defined
<anonymous> utils.js:3
utils.js:3
XHRGEThttp://localhost:9000/__dev_socket.io/?EIO=4&transport=polling&t=Nmn0ZSw&sid=A73E1yB2LRv80nHnAAAA
[HTTP/1.1 200 OK 1ms]
GEThttp://localhost:9000/favicon.ico
[HTTP/1.1 200 OK 2ms]
XHRGEThttp://localhost:9000/__dev_socket.io/?EIO=4&transport=polling&t=Nmn0ZTn&sid=A73E1yB2LRv80nHnAAAA
[HTTP/1.1 200 OK 37ms]
GEThttp://localhost:9000/src/aurelia-bootstrapper.js
[HTTP/1.1 404 Not Found 5ms]
The resource from “http://localhost:9000/src/aurelia-bootstrapper.js” was blocked due to MIME type (“text/html”) mismatch (X-Content-Type-Options: nosniff). localhost:9000
Loading failed for the <script> with source “http://localhost:9000/src/aurelia-bootstrapper.js”. localhost:9000:1:1
Uncaught Error: Script error for "aurelia-bootstrapper"
https://requirejs.org/docs/errors.html#scripterror
makeError require.js:168
onScriptError require.js:1738
load require.js:1943
load require.js:1685
load require.js:834
fetch require.js:824
check require.js:856
enable require.js:1176
enable require.js:1557
enable require.js:1161
bind require.js:134
each require.js:59
enable require.js:1113
init require.js:788
localRequire require.js:1460
setTimeout handler*req.nextTick< require.js:1815
localRequire require.js:1449
configure require.js:1387
requirejs require.js:1794
<anonymous> require.js:2144
<anonymous> require.js:2145
require.js:168
...
我尝试使用几个较早版本的 pouchdb-browser (@7.2.1, @7.1.1),但在 Web 控制台上出现另一种错误
Uncaught (in promise) ReferenceError: process is not defined
<anonymous> index.js:6
execCb require.js:1696
check require.js:878
enable require.js:1176
enable require.js:1557
enable require.js:1161
bind require.js:134
each require.js:59
enable require.js:1113
enable require.js:1557
enable require.js:1161
bind require.js:134
each require.js:59
enable require.js:1113
enable require.js:1557
enable require.js:1161
bind require.js:134
each require.js:59
enable require.js:1113
enable require.js:1557
enable require.js:1161
bind require.js:134
each require.js:59
enable require.js:1113
enable require.js:1557
enable require.js:1161
bind require.js:134
each require.js:59
enable require.js:1113
enable require.js:1557
enable require.js:1161
bind require.js:134
each require.js:59
enable require.js:1113
init require.js:788
localRequire require.js:1460
setTimeout handler*req.nextTick< require.js:1815
localRequire require.js:1449
requirejs require.js:1797
loadModule aurelia-loader-default.js:165
loadModule aurelia-loader-default.js:164
importViewModelResource aurelia-templating.js:3594
ensureViewModel aurelia-templating.js:4960
createController aurelia-templating.js:4936
_createControllerAndSwap aurelia-templating.js:4908
compose aurelia-templating.js:5010
compose aurelia-templating.js:5275
setRoot aurelia-framework.js:215
configure main.js:14
promise callback*configure main.js:14
config aurelia-bootstrapper.js:138
promise callback*config aurelia-bootstrapper.js:133
p aurelia-bootstrapper.js:169
promise callback*bootstrap aurelia-bootstrapper.js:168
run aurelia-bootstrapper.js:155
promise callback*run aurelia-bootstrapper.js:150
<anonymous> aurelia-bootstrapper.js:175
execCb require.js:1696
check require.js:883
enable require.js:1176
enable require.js:1557
enable require.js:1161
bind require.js:134
each require.js:59
enable require.js:1113
enable require.js:1557
enable require.js:1161
bind require.js:134
each require.js:59
enable require.js:1113
init require.js:788
localRequire require.js:1460
setTimeout handler*req.nextTick< require.js:1815
localRequire require.js:1449
configure require.js:1387
requirejs require.js:1794
<anonymous> require.js:2144
<anonymous> require.js:2145
我尝试使用“alameda”捆绑器/模块加载器而不是 requirejs,但在 Web 控制台上仍然出现错误。我还尝试安装单个 pouchDB 包(pouchdb-core、pouchdb-adapter-idb)而不是预设包(pouchdb-browser),但我仍然遇到同样的错误。
我认为这可能是 aurelia 内置捆绑器无法自动处理的极端情况之一,并且 aurelia.json 配置文件中需要进行一些配置。
有人设法将 pouchDB 库捆绑在 Aurelia v1 应用程序中吗?有人可以帮忙吗?
解决方案
我曾将 pouchdb-browser 与 Aurelia v1 一起使用,它以前曾工作过,尽管我最近没有尝试过。但是,我确实必须将以下内容添加到 main.js 以使其正常工作:
//to make pouchdb-browser work
import process from 'process';
window.process = process;
import {Buffer} from 'buffer';
window.Buffer = Buffer;
推荐阅读
- java - 一种在java中获取2个循环单链表并集的方法
- python - 有没有办法在安装时自动将依赖项添加到 requirements.txt 中?
- c - 使用 Openssl EVP 加密时出现分段错误:EVP_EncryptUpdate()
- python - AssertionError:视图函数映射在为 FLASK 项目创建数据库时覆盖现有端点函数
- django - 如何在 django 中唯一标识模型实例
- html - 使用 IE11 CSS 网格时防止重叠
- oracle - SQL PLUS 登录失败
- android - 为什么我不能在表中显示 firebase firestore 数据?
- r - R Makevars:如何评估预处理器标志的命令?
- html - 如何显示一个引导范围以及如何在输入字段中显示值?