Exemple de didacticiel de configuration de développement ThinkJS
Les fichiers de configuration sont définis par module
thinkjs permet aux développeurs de configurer leurs propres paramètres directement ci-dessous src/common/config/
et d'ajouter directement des fichiers js. Le nom du fichier doit uniquement répondre aux exigences de nom d'attribut json et le fichier. le contenu suit Le format est le suivant :
// 新增文件 assets.js 键入如下内容'use strict';export default { // key: value};
Le contenu du fichier doit uniquement être conforme à la définition d'un format d'objet json. Regardons une définition de configuration log4js :
// log4js.js'use strict';export default { appenders: [{ type : "console", category: "console"},// 定义一个日志记录器{ type : "dateFile", // 日志文件类型,可以使用日期作为文件名的占位符 filename : "logs/", // 日志文件名,可以设置相对路径或绝对路径 pattern : "debug/yyyyMMddhh.txt", // 占位符,紧跟在filename后面 absolute : true, // filename是否绝对路径 alwaysIncludePattern: true, // 文件名是否始终包含占位符 category : "logInfo" // 记录器名} ], levels : {logInfo: "DEBUG" } // 设置记录器的默认显示级别,低于这个级别的日志,不会输出}
Les fichiers de configuration sont des paramètres statiques et stockent généralement des paramètres de configuration qui ne changent pas fréquemment (bien sûr, les valeurs des paramètres de configuration peuvent être modifié en mémoire, comme suit sera expliqué en détail).
De plus, le fichier de configuration est un fichier js qui exporte les définitions de variables au format ES6, pas un fichier json. L'avantage ici est que vous pouvez ajouter des commentaires commençant par //.
Si vous faites attention, vous avez dû le remarquer : en plus de src/common/config
, il y a aussi un dossier src/home/
sous le module config
.
D'une manière générale, il est plus raisonnable de définir et d'organiser en fonction de la portée du fichier de configuration.
Par exemple : les configurations utilisées par tous les modules sont plus appropriées pour être placées sous src/common/config
, tandis que les configurations utilisées uniquement pour le module d'accueil sont plus appropriées pour être placées sous src/home/config
.
Lorsqu'il y a trop de fichiers de configuration, nous devons faire attention à l'ordre de chargement de plusieurs fichiers de configuration.
Ordre de chargement du fichier de configuration
Le site officiel décrit l'ordre de chargement du fichier de configuration comme ceci :
框架默认的配置 -> 项目模式下框架配置 -> 项目公共配置 -> 项目模式下的公共配置 -> 模块下的配置
Demander moi en premier Question : À quoi font référence ces cinq configurations ?
Les deux premiers peuvent être ignorés. Ce sont les paramètres de configuration du framework thinkjs lui-même. Habituellement, notre projet n'utilisera aucun paramètre de configuration.
Les troisième et quatrième sont les dossiers de configuration par défaut sous différents modes de création de projet (pour le mode de création de projet, veuillez vous référer à Node.js Domestic MVC Framework ThinkJS Development Introduction (Jingxiu.com)), emplacement dans :
# normal modethinkjs_normal/src/config/*# module modethinkjs_module/src/common/config/*
Le dernier fait référence au projet en mode module. Chaque module a sa propre config L'emplacement est :
thinkjs_module/src/home/config/*
fusionnés ensemble (notez le texte en gras).
Ainsi, lorsqu'il y a plusieurs fichiers de configuration, vous devez faire attention àessayer de ne pas répéter les clés (c'est-à-dire les noms d'attribut) des paramètres de configuration , car selon l'ordre de chargement, le La valeur de la clé chargée ultérieurement écrasera la première. La valeur de la clé chargée entraîne des résultats indésirables.
Astuce : Le tutoriel explique principalement la méthode de développement en mode module.
Changer automatiquement les fichiers de configuration Comme mentionné précédemment, nous pouvons placer les fichiers de configuration sous Tous les paramètres de configuration peuvent être placés dans un seul fichier, ou ils peuvent être dispersés dans plusieurs. fichiers dans un fichier. src/common/config
, à savoir la configuration de développement src/common/config/env/
, la configuration de production development
et la configuration de test production
, qui peuvent sauvegarder notre intégration continue. testing
src/common/config/env/development.js
{ "scripts": {"start": "node www/development.js?1.1.11","compile": "babel src/ --out-dir app/","watch-compile": "node -e \"console.log('<npm run watch-compile> no longer need, use <npm start> command direct.');console.log();\"","watch": "npm run watch-compile" }}
définit les détails lorsque nous utilisons scripts.start
directement Ce qui est réellement exécuté est la commande npm start
. node www/development.js
var thinkjs = require('thinkjs');var path = require('path');var rootPath = path.dirname(__dirname);var instance = new thinkjs({ APP_PATH: rootPath + path.sep + 'app', RUNTIME_PATH: rootPath + path.sep + 'runtime', ROOT_PATH: rootPath, RESOURCE_PATH: __dirname, env: 'development' // <-- 这里定义了当前的 thinkjs 实例的运行环境});// Build code from src to app directory.instance.compile({ log: true});instance.run();
:-)
生产配置
生产配置文件是:src/common/config/env/production.js
明白了开发配置的原理,也就不难明白生产配置了。
使用 node www/production.js
命令可以告诉 thinkjs 现在运行的是生产环境。
同理,生产配置中的参数名(属性名)一般与开发配置一样,只是值不同而已。
比较常见的是数据库连接,本地开发时连接的是测试库,而生产环境中连接的是生产库,不同的地址、用户、密码和库名,这些都是要交给运维人员来管理了。
测试配置
测试配置文件是:src/common/config/env/testing.js
明白了前两个配置,这个也不难明白~
使用 node www/testing.js
命令可以告诉 thinkjs 现在运行的是测试环境。
定义和使用配置文件
前面其实有介绍过配置文件的分布原则和定义方法,只要确保不与系统特定配置冲突即可自由定义。
系统特定配置
下面是 thinkjs 默认的配置文件清单,这些系统特定配置都是有相应的使用场景和参数设置,详细说明及完整参数详见:
src/common/config/├── config.js # 可以放置自己的配置├── db.js # 数据库连接├── env # 运行时配置,下面会详述│ ├── development.js│ ├── production.js│ └── testing.js├── error.js # 错误配置├── hook.js # 钩子配置├── locale # 多语言版配置│ └── en.js├── session.js└── view.js # 视图文件配置
自定义配置
一般做法是使用带有层级的配置定义来组织配置参数(当然你一定要把全部参数都放在根下面也不是不可以),参见如下配置:
// development.js'use strict';export default { site_name: "", site_title: "", site_keywords: "", site_description: "", db: { // 这里的配置替代 db.jstype : 'mysql',log_sql: true, //是否记录 sql 语句adapter: { mysql: {host : '127.0.0.1',port : '3306',database: '',user : '',password: '',prefix : 'thinkjs_',encoding: 'utf8' }} }, jwt: { // 第三方模块的公共定义options: { algorithm: 'HS128', expiresIn: '7d'} }, pay: {// 定义与在线支付接口相关的参数 }, backend: {// 定义管理后台相关的参数 }, home: {// 定义前端网站相关的参数 }, rest: {// 定义 REST API 相关的参数 }, task: {// 定义 crond 相关的参数 }};
配置参数按照层次组织之后,需要注意的一点是:获取配置的时候,不能无限制的 this.config(参数.参数.参数.参数)
下去,详见下面读取配置的几种方式描述。
几种读取配置的方式
配置文件定义之后,需要在项目运行的特别业务中读取(也可以设置)到配置参数的值,根据读取配置的位置的不同,thinkjs 提供了以下几种读取方式。
this.config()
这是使用率最高的读取配置方法,绝大多数位置都可以使用此方法来读取配置,比如 controller
logic
model
service
middleware
等地方。
// 配置 development.jslet dbOpt = this.config('db');let jwtOpt = this.config('jwt.options');
这里有一点需要注意:thinkjs 只能解析两层配置参数,超过的层级不予解析(源码中写死了仅返回两层)。
// 配置 development.jslet jwtOpt = this.config('jwt.options');console.log(jwtOpt);// 读取成功,打印:// {// options: {// algorithm: 'HS128',// expiresIn: '7d'// }// }let jwtOptAlg = this.config('jwt.options.algorithm');console.log(jwtOptAlg);// 超过三层,读取失败,只能读取到两层内容,打印:// {// options: {// algorithm: 'HS128',// expiresIn: '7d'// }// }jwtOptAlg = jwtOpt['algorithm'];console.log(jwtOptAlg);// 正确的读取方式,打印:// HS128
think.config()
think.config 方法可以:
无须考虑当前位置来读取配置参数(其内部运行方式类似 this.config )
跨模块读取配置参数
对于前者可以无须思考当前所在的模块,更自由的读取配置参数。
对于后者则对开发多模块协作有着比较重要的意义,配置参数只有一份,不可能向不同的模块复制相同的配置,因此需要“一处配置、多处可用”。因此无须考虑“我在哪里读取配置”,只要考虑“我要读取哪里的配置”即可。
// 配置文件:src/home/config/assets.jslet siteName = think.config('assets.site_name', undefined, 'home');
方法的第二个参数设置为 undefined
是为了避免将读取动作变为设置动作。
方法的第三个参数标明了这个配置参数在哪个模块下面,一旦给定此参数,thinkjs 会认为 src/home/config/
下面的配置是你需要读取的目标。
http.config()
http.config 方法实质上是 think.config() 的一个别名,可以读取和设置配置参数。
避免踩坑之正确读取参数
如果不能理解 thinkjs 设计配置文件读取策略的情况下,会无意中踩坑,如下便是一个例子,代码说话。
假设有两个配置文件 src/common/config/assets.js
和 src/home/config/assets.js
,其中有着一样的属性名:
// src/common/config/assets.jsexport default { "site_title": "my site"};// src/home/config/assets.jsexport default { "site_title": "my test"};// 两个配置参数属性名一样的情况下// 使用不同的读取方式// 注意 config 方法的上下文对象的不同// 会导致读取的结果的不同// src/home/controller/index.jslet assets = this.config('assets');let siteTitle = assets['site_title'];console.log('siteTitle is: ', siteTitle);// 打印:// my test// src/home/controller/index.jslet assets = think.config('assets', undefined, 'common');let siteTitle = assets['site_title'];console.log('siteTitle is: ', siteTitle);// 打印:// my site
明白了 thinkjs 配置文件加载顺序,就不会对上面发生的情况惊讶了~
如果你实在懒得去思考 this.config
和 think.config
两者的分别,建议你干脆使用后者,当读取参数只传入第一个参数时,它的表现与前者一致。这样貌似更有利于代码的维护~
避免踩坑之动态修改配置参数
当读取到了配置参数后,当然是可以动态修改其为新的值,以让后续的处理都读到新的值。动态修改方法也很简单:config 方法的第二个参数就是给定的新值。
let siteTitle = this.config('assets.site_title');console.log(siteTitle);// 打印:// my testthis.config('assets.site_title', 'test 123');siteTitle = this.config('assets.site_title');console.log(siteTitle);// 打印:// test 123
上面的动态修改方法其实平淡无奇,来看看更有趣的修改方法,如下:
let siteAuthor = this.config('assets.site_author');console.log(siteAuthor);// 打印:// {// name: 'xxuyou.com',// email: 'cap@xxuyou.com'// }siteAuthor['name'] = 'cap';siteAuthor = this.config('assets.site_author');console.log(siteAuthor);// 打印:// {// name: 'cap',// email: 'cap@xxuyou.com'// }
假如上面的代码片段修改一下写法,就可以得到预期的效果,如下:
let siteAuthor = think.extend({}, this.config('assets.site_author')); // <-- 不同点在这里console.log(siteAuthor);// 打印:// {// name: 'xxuyou.com',// email: 'cap@xxuyou.com'// }siteAuthor['name'] = 'cap';siteAuthor = this.config('assets.site_author');console.log(siteAuthor);// 打印:// {// name: 'xxuyou.com',// email: 'cap@xxuyou.com'// }
Peu importe de qui il s'agit think.extend
, pourquoi modifier la variable à gauche du signe égal a-t-il le même effet que de modifier directement la méthode de configuration ?
La raison est en fait très simple :
thinkjs met en cache les paramètres de configuration en interne. La valeur du paramètre de configuration
est un
Object
au lieu deString
.
OK~
Pack de langue
Le pack de langue lui-même peut en fait être décrit séparément comme i18n, mais en raison de l'internationalisation du développement actuel et même processus d'architecture Il est rarement couvert, il est donc brièvement décrit ici.
src/config/locale/en.js
L'environnement de langue anglaise par défaut du système, qui définit les modèles de langue pertinents.
src/config/locale/zh-CN.js
Par souci de standardisation, il est recommandé de configurer manuellement ce fichier modèle de langue et de modifier le paramètre src/common/config/local.js
dans default
à zh-CN
c'est-à-dire Ce modèle de langue peut être activé.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Comprendre le fonctionnement du moteur JavaScript en interne est important pour les développeurs car il aide à écrire du code plus efficace et à comprendre les goulots d'étranglement des performances et les stratégies d'optimisation. 1) Le flux de travail du moteur comprend trois étapes: analyse, compilation et exécution; 2) Pendant le processus d'exécution, le moteur effectuera une optimisation dynamique, comme le cache en ligne et les classes cachées; 3) Les meilleures pratiques comprennent l'évitement des variables globales, l'optimisation des boucles, l'utilisation de const et de locations et d'éviter une utilisation excessive des fermetures.

Python convient plus aux débutants, avec une courbe d'apprentissage en douceur et une syntaxe concise; JavaScript convient au développement frontal, avec une courbe d'apprentissage abrupte et une syntaxe flexible. 1. La syntaxe Python est intuitive et adaptée à la science des données et au développement back-end. 2. JavaScript est flexible et largement utilisé dans la programmation frontale et côté serveur.

Python et JavaScript ont leurs propres avantages et inconvénients en termes de communauté, de bibliothèques et de ressources. 1) La communauté Python est amicale et adaptée aux débutants, mais les ressources de développement frontal ne sont pas aussi riches que JavaScript. 2) Python est puissant dans les bibliothèques de science des données et d'apprentissage automatique, tandis que JavaScript est meilleur dans les bibliothèques et les cadres de développement frontaux. 3) Les deux ont des ressources d'apprentissage riches, mais Python convient pour commencer par des documents officiels, tandis que JavaScript est meilleur avec MDNWEBDOCS. Le choix doit être basé sur les besoins du projet et les intérêts personnels.

Le passage de C / C à JavaScript nécessite de s'adapter à la frappe dynamique, à la collecte des ordures et à la programmation asynchrone. 1) C / C est un langage dactylographié statiquement qui nécessite une gestion manuelle de la mémoire, tandis que JavaScript est dynamiquement typé et que la collecte des déchets est automatiquement traitée. 2) C / C doit être compilé en code machine, tandis que JavaScript est une langue interprétée. 3) JavaScript introduit des concepts tels que les fermetures, les chaînes de prototypes et la promesse, ce qui améliore la flexibilité et les capacités de programmation asynchrones.

Différents moteurs JavaScript ont des effets différents lors de l'analyse et de l'exécution du code JavaScript, car les principes d'implémentation et les stratégies d'optimisation de chaque moteur diffèrent. 1. Analyse lexicale: convertir le code source en unité lexicale. 2. Analyse de la grammaire: générer un arbre de syntaxe abstrait. 3. Optimisation et compilation: générer du code machine via le compilateur JIT. 4. Exécuter: Exécutez le code machine. Le moteur V8 optimise grâce à une compilation instantanée et à une classe cachée, SpiderMonkey utilise un système d'inférence de type, résultant en différentes performances de performances sur le même code.

Les applications de JavaScript dans le monde réel incluent la programmation côté serveur, le développement des applications mobiles et le contrôle de l'Internet des objets: 1. La programmation côté serveur est réalisée via Node.js, adaptée au traitement de demande élevé simultané. 2. Le développement d'applications mobiles est effectué par le reactnatif et prend en charge le déploiement multiplateforme. 3. Utilisé pour le contrôle des périphériques IoT via la bibliothèque Johnny-Five, adapté à l'interaction matérielle.

J'ai construit une application SAAS multi-locataire fonctionnelle (une application EdTech) avec votre outil technologique quotidien et vous pouvez faire de même. Premièrement, qu'est-ce qu'une application SaaS multi-locataire? Les applications saas multi-locataires vous permettent de servir plusieurs clients à partir d'un chant

Cet article démontre l'intégration frontale avec un backend sécurisé par permis, construisant une application fonctionnelle EdTech SaaS en utilisant Next.js. Le frontend récupère les autorisations des utilisateurs pour contrôler la visibilité de l'interface utilisateur et garantit que les demandes d'API adhèrent à la base de rôles


Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Version crackée d'EditPlus en chinois
Petite taille, coloration syntaxique, ne prend pas en charge la fonction d'invite de code

Version Mac de WebStorm
Outils de développement JavaScript utiles

Navigateur d'examen sécurisé
Safe Exam Browser est un environnement de navigation sécurisé permettant de passer des examens en ligne en toute sécurité. Ce logiciel transforme n'importe quel ordinateur en poste de travail sécurisé. Il contrôle l'accès à n'importe quel utilitaire et empêche les étudiants d'utiliser des ressources non autorisées.

SublimeText3 version anglaise
Recommandé : version Win, prend en charge les invites de code !

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP