相关疑难解决方法(0)

node.js require()cache - 可能无效?

从node.js文档:

模块在第一次加载后进行缓存.这意味着(除其他外)每次调用require('foo')将获得完全相同的返回对象,如果它将解析为同一个文件.

有没有办法使这个缓存无效?即对于单元测试,我希望每个测试都能处理一个新的对象.

node.js

303
推荐指数
9
解决办法
13万
查看次数

从正在运行的node.js应用程序确定项目根目录

有没有比process.cwd()确定正在运行的node.js进程的根目录更好的方法?类似的东西Rails.root,但对于Node.js. 我正在寻找尽可能可预测和可靠的东西.

node.js

284
推荐指数
13
解决办法
30万
查看次数

.js 和 .mjs 文件有什么区别?

我已经开始在一个基于 Node.js 的现有项目上工作。我只是想了解执行流程,在那里我遇到了一些*.mjs文件。我搜索了网络,发现这些是基于模块的 JS 文件。

我想知道它与*.js文件有什么不同(它有什么好处)?

javascript node.js mjs

103
推荐指数
3
解决办法
6万
查看次数

Mocha使用额外的选项或参数进行测试

我正在使用Mocha为我的Node.js应用程序编写测试用例.测试用例需要API密钥作为额外的输入选项或参数.API密钥是私有的,所以我不想将它直接包含在测试文件中,因为每个人都可以在GitHub上看到它.我知道Mocha有一些选择:

http://mochajs.org/#usage

但是是否可以包含一些参数让测试人员在命令行中为测试指定自己的API密钥?如:

./node_modules/mocha/bin/mocha test/*.js --key YOUR_KEY
Run Code Online (Sandbox Code Playgroud)

mocha.js node.js

77
推荐指数
7
解决办法
7万
查看次数

Angular2 - root相对导入

我对angular2/typescript中的导入有问题.我想使用像'app/components/calendar'这样的root的导入,而只是我能够使用的方式是这样的:

//app/views/order/order-view.ts
import {Calendar} from '../../components/calendar 
Run Code Online (Sandbox Code Playgroud)

其中Calendar定义如下:

//app/components/calendar.ts
export class Calendar {
}
Run Code Online (Sandbox Code Playgroud)

这显然会越来越差,你去的等级越低,最深的是'../../ ..'但它仍然非常糟糕和脆弱.有没有办法如何使用相对于项目根目录的路径?

我在Visual Studio中工作,相对导入似乎是唯一使VS能够识别这些imports.y的东西

typescript angular

36
推荐指数
5
解决办法
4万
查看次数

节点需要绝对路径

我有一个如下所示的目录:

-- app/
   |- models/
      |- user.js
   |- config.json
Run Code Online (Sandbox Code Playgroud)

我想要我的user.js文件config.json.现在我正在使用,require('/config')但这不起作用.我究竟做错了什么?我想避免使用require('../config').

javascript directory node.js express

22
推荐指数
2
解决办法
2万
查看次数

不要忽略Atom中的node_modules

node_modules按照这个答案的建议用来存储我的代码:https://stackoverflow.com/a/24630974/599184

但是,Atom的搜索忽略了node_modules.如何将其包含node_modules在搜索中?我没有node_modules在Atom的"被忽略的名字"设置中.

node.js atom-editor

20
推荐指数
2
解决办法
8147
查看次数

如何使用项目根目录中的文件路径在 NodeJS 中导入 JavaScript 文件?(而不是相对文件路径)

问题:

\n

如何使用项目根目录中的文件路径在 NodeJS 中导入 JavaScript 文件?(而不是相对文件路径)

\n

换句话说,我的团队正在尝试从语法样式 A过渡到语法样式 B(如下所示):

\n

语法风格A

\n
const source = require(\'../../../../../../source.js\');\n
Run Code Online (Sandbox Code Playgroud)\n

语法风格 B

\n
const source = require(\'src/source.js\'); // "src" is a direct subfolder of the project root\n
Run Code Online (Sandbox Code Playgroud)\n

我已经审阅了很多关于这个主题的帖子,但没有一个能够满足我的项目的要求......

\n
\n

项目要求:

\n
    \n
  • 要求#1:没有外部包(例如 Babel.js 或 Webpack),因为磁盘空间有限。另外,我们无法使用“npm install”安装任何东西。
  • \n
  • 要求#2:JavaScript 文件应该能够使用“项目根”文件路径而不是相对文件路径导入另一个 JavaScript 文件。(这将避免诸如“../../../../../../../script.js”之类的长相对路径,这可能会变得难以管理。)
  • \n
  • 要求#3:在源代码中的任意位置右键单击导入的类应该会弹出一个上下文菜单,其中包含“转到声明”选项(这将我们直接带到导入的文件)。此外,将 JavaScript 文件移动到 IDE 中的其他文件夹应该会自动更新所有引用。我们可以使用任何IDE。
  • \n
  • 要求#4:为了采用一致的方式导入脚本,我们将使用 NodeJS 的“require”关键字进行导入(而不是 JavaScript 的“import”关键字)。
  • \n
\n
\n

设置:

\n

以下是我的设置。Package.json是由WebStorm生成的,我没有更改它。

\n …

javascript require commonjs node.js webstorm

15
推荐指数
1
解决办法
8518
查看次数

如何解决相对路径地狱(带有打字稿的节点)

我正在使用节点、打字稿和其他包开发 CLI。这个想法很简单,CLI 为您提供了节点项目的初始结构(javascript 或 typescript)

\n

嗯,在测试的时候,我发现了一个问题,我好几天都无法解决。初始结构为:

\n
\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80src\n\xe2\x94\x82    \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80api\n\xe2\x94\x82    \xe2\x94\x82   \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80users\n\xe2\x94\x82    \xe2\x94\x82        \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80users.controller.ts/js\n\xe2\x94\x82    \xe2\x94\x82        \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80users.interface.ts (just for typescript projects)\n\xe2\x94\x82    \xe2\x94\x82        \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80users.routes.ts/js\n\xe2\x94\x82    \xe2\x94\x82        \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80users.service.ts/js\n\xe2\x94\x82    \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80config\n\xe2\x94\x82    \xe2\x94\x82   \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80environments\n\xe2\x94\x82    \xe2\x94\x82        \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80development.ts/js\n\xe2\x94\x82    \xe2\x94\x82        \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80index.ts/js\n\xe2\x94\x82    \xe2\x94\x82        \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80production.ts/js\n\xe2\x94\x82    \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80global\n\xe2\x94\x82    \xe2\x94\x82   \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80services\n\xe2\x94\x82    \xe2\x94\x82        \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80abstract.service.ts (just for typescript projects)\n\xe2\x94\x82    \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80middlewares\n\xe2\x94\x82    \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80database.ts/js\n\xe2\x94\x82    \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80index.ts/js\n\xe2\x94\x82    \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80server.ts/js\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80.editorconfig\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80.env\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80.gitignore\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80package.json\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80package-lock.json\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80tsconfig.json (just for typescript projects)\n
Run Code Online (Sandbox Code Playgroud)\n

Typescript 服务文件扩展了抽象服务(这个位于 参考资料中./src/global/services/abstract.service.ts)。每个组件都位于./src/api目录中并具有其各自的文件夹(如用户组件)。在users组件中导入抽象类的相对路径是../../global/services/abstract.service

\n

但是您可以在不同的目录中创建组件,因此之前的相对路径不起作用。为了解决这个问题,我决定使用像 webpack 这样的路由配置。所以我不想使用以前的相对路径,而是想使用这样的东西@global/services/abstract.service

\n

如果节点项目使用 javascript 和 babel,我就实现了这一点:

\n
    \n
  • @babel/polyfill
  • \n
  • @babel/cli
  • \n
  • @babel/核心
  • \n
  • @babel/节点
  • \n
  • @babel/预设节点 …

relative-path node.js typescript tsconfig tsconfig-paths

7
推荐指数
0
解决办法
2750
查看次数

如何使用ES6模块导入导入路径

有没有什么好方法可以优雅地加载模块(IDE可以建议或进入文件)使用动态路径或从根目录开始导入模块?

import * as Q from 'q';
import * as loopback from 'loopback';
import datasources from '../../../datasources.json';
import app from '../../../server';
import {ApiError, ValidationError, DatabaseError} from'../../../utils/error-handlers';
Run Code Online (Sandbox Code Playgroud)

javascript node.js ecmascript-6 strongloop

6
推荐指数
1
解决办法
3200
查看次数

node_modules 文件夹的用途是什么?

我想知道 node_modules 文件夹到底是什么以及用于什么。我知道当我们使用 npm 下载任何库时,该库会转到 node_modules,但我知道当我们要将其上传到 github 时,我们必须忽略 node_modules 文件夹,因为它占用大量空间。通过 package.json 我们可以使用 npm i 下载所有依赖项,我的问题是...假设我想将我的应用程序/网站部署到某个服务器/主机,我是否也必须将 node_modules 文件夹上传到服务器?另一件事,通常我从网站下载我的 jquery 和 bootstrap 并复制到我的项目内的 css/js 文件夹中,但是这次我尝试使用 npm 并且一切都转到 node_modules 并且我使用的是cordova,当我执行命令cordova时build 既不生成我的 jquery 也不生成我的引导程序。所以这就是我的问题,如果我想主持我的项目,我真的必须上传 node_modules 吗?当它是cordova或ionic时,我还必须将node_modules复制到www文件夹吗?如果是,那么使用 npm 下载库有什么意义?这是真的吗?哪一个更好?去网站下载文件并粘贴到 www 或通过 npm 下载?

jquery node.js npm node-modules bootstrap-4

6
推荐指数
1
解决办法
1万
查看次数

为特定模块编写测试时如何使用绝对导入路径

我正在开发一个 NodeJS (v. 8.12.0, EcmaScript 6) 项目,其项目结构类似于:

project_root/
    src/
        utils/
            protocol_messages/
                helpers.js
    tests/
        unit/
            utils/
                protocol_messages/
                    helpers.js
Run Code Online (Sandbox Code Playgroud)

我正在使用 Mocha 作为测试框架编写测试。

问题
helpers.jsunder 中tests/unit/utils/protocol_messages/,导入被测模块的正确方法是什么?

详细说明:
我想避免使用相对路径:require('../../../../../src/utils/protocol_messages/helpers')
它有效,但很丑陋,如果项目结构发生变化,我也必须重写测试导入。

(我是 Javascript 的新手,所以我可能做错了几件事。)

更新此问题中
提供的解决方案:

  1. require.main.require:在对此答案的评论中,“如果代码包含像 Mocha 测试这样的单元测试,则此解决方案将不起作用”
  2. 将我的 utils 提取到节点模块对我来说没有意义,因为代码非常特定于应用程序。
  3. node_modulessrc/的 NodeJS 项目的项目根目录下有一个额外的东西似乎没有意义。
  4. 当我只使用 NodeJS 中可用的功能并编写 CommonJS 项目时,使用 Javascript 转译器似乎有点矫枉过正。

如果我在以上任何一点上有错误,请指出,因为我不知所措。在我看来,NodeJS 没有提供使用绝对路径导入 CommonJS 模块的本机方式。

mocha.js node.js ecmascript-6

5
推荐指数
1
解决办法
1217
查看次数