节点REPL中的更改目录不起作用?

时间:2015-02-05 06:15:32

标签: javascript node.js

早些时候,我发布了我的问题: https://stackoverflow.com/questions/28336443/how-to-not-put-my-js-files-in-user-myuser-for-node-js

我有一个位于/ Users / MyUser / Desktop / Node /

的文件hello.js

我可以看到我的默认目录是/ Users / MyUser /

好的,所以我知道我需要更改我的工作目录。到目前为止我能找到的是使用>process.chrdir('/Users/MyUser/Desktop/Node/');

酷,这有效,但现在当我离开REPL shell时,目录重置。

回复我的问题的人说我需要运行>node init以及之后npm install <name of dependency> --save

我的第一个问题:我已经运行>node init并且看到我可以创建这个package.json文件,这究竟是做什么的?

其次:我被告知需要添加依赖项。有人可以向我解释这在节点方面意味着什么吗?依赖性仅仅意味着我希望节点包含的文件夹吗?我是否要在桌面上添加此节点文件夹以便能够运行我的脚本?

我目前正在尝试浏览learnyounode课程,但我不想将所有这些测试文件保存在我的/ User / MyUser目录中,因此非常感谢任何建议。

由于

2 个答案:

答案 0 :(得分:2)

  

我已运行&gt;节点init并看到我可以创建   这个package.json文件,这究竟是做什么的?

npm init用于以交互方式创建package.json文件。这会问你一堆问题,然后为你写一个package.json。

package.json只是一个处理项目依赖项的文件,而包含与项目相关的各种元数据 [项目描述,版本,许可证信息等]

  

我被告知我需要添加依赖项。有人可以请   向我解释这在节点术语中意味着什么?

假设您在许多NPM模块上构建了一个依赖的应用程序,您可以这样在package.json文件中指定它们:

"dependencies": {
  "express": "2.3.12",
  "jade": ">= 0.0.1",
  "redis":   "0.6.0"
}

现在做npm install会安装一个包,以及它所依赖的任何包。

包裹是:

  1. 包含package.json文件描述的程序的文件夹
  2. 包含(1)
  3. 的gzipped tarball
  4. 解析为(2)
  5. 的网址
  6. 使用(3)
  7. registry上发布的@
  8. a @指向(4)
  9. a有一个&#34;最新的&#34;标签满足(5)
  10. a解析为(2)
  11. 如果您需要安装尚未包含在package.json中的依赖项,只需执行npm install <packageName>即可。是否要在package.json中包含这个新安装的软件包完全是您的选择。您还可以决定新安装的软件包在package.json

    中的显示方式
        npm install <packageName> [--save|--save-dev|--save-optional]:  
          --save: Package will appear in your dependencies.
          --save-dev: Package will appear in your devDependencies.
          --save-optional: Package will appear in your optionalDependencies.
    
      

    依赖项是否只是指我希望节点包含的文件夹?

    嗯,部分是的。您可以将依赖项视为文件夹,通常存储在node_modules目录中。

      

    我是否要在桌面上添加此节点文件夹以便能够运行我的   脚本?

    不,节点管理它。 npm install将自动创建node_modules目录,您可以参考这些依赖项 你的.js文件中的require()

    var express = require('express');
    

    Node REPL简单地提供了一种交互式运行JavaScript并查看结果的方法。它可以用于调试,测试或只是尝试一下。 process.cwd() 指向已启动REPL的目录。您可以更改它using process.chdir('/path'),但关闭REPL会话并重新启动后,它将始终重新实例化 process.cwd()到它已启动的目录。

    如果要在节点project1中安装某些软件包/依赖项,并认为这些依赖项也可用于节点project2,

    • 再次为project2安装它们(以获得独立的node_modules目录)
    • 全局安装[使用-g标志]。见this
    • 将project2中的包引用为 var referencedDependency = require('/home/User/project1/node_modules/<dependency>')

    只需在REPL中执行process.chdir('/home/User/project1/node_modules/')并引用为 您的js文件中的var referencedDependency = require('<dependency>') 无法正常工作

    >process.chdir('/Users/MyUser/Desktop/Node/');仅针对该特定REPL会话更改工作目录。

    希望它有所帮助!

答案 1 :(得分:0)

这与node.js无关,但在Unix的设计中相当固有(反过来影响其他操作系统上的shell设计)。

进程从父级环境继承值,但它们的环境是不同的。

关于流程环境如何工作的简洁描述有时会出现意外行为:您无法更改父级环境。出于安全原因,它是以明确的方式设计的。

这意味着,当您更改进程中的工作目录并退出该进程时,您的shell的工作目录不会受到影响。实际上,即使进程(在本例中为节点REPL)正在运行,shell的工作目录也不会受到影响。

编写shell脚本的人经常会想要编写一个CD到某个地方的脚本。但是,人们在编写Perl,Tcl,Ruby等其他语言(甚至是C)时也会发现这个问题也很常见。

无论语言如何,这个问题的答案总是一样的:不可能从其他程序/脚本/进程中获取CD。

我不确定Windows如何处理它,因此可以在那里进行。但是在Unixen上它是不可能的。