@@ -381,54 +381,100 @@ browserify browser/main.js | uglifyjs -mc > static/bundle.js
381381
382382一般来说,每个项目都会在项目目录内,安装所需的模块文件。也就是说,各个模块是局部安装。但是有时候,我们希望模块是一个符号链接,连到外部文件,这时候就需要用到npm link命令。
383383
384- 现在模块A(moduleA)的安装目录下运行npm link命令。
384+ 为了理解npm link,请设想这样一个场景。你开发了一个模块myModule,目录为src/myModule,你自己的项目myProject要用到这个模块,项目目录为src/myProject。每一次,你更新myModule,就要用` npm publish ` 命令发布,然后切换到项目目录,使用` npm update ` 更新模块。这样显然很不方便,如果我们可以从项目目录建立一个符号链接,直接连到模块目录,就省去了中间步骤,项目可以直接使用最新版的模块。
385+
386+ 先在模块目录(src/myModule)下运行npm link命令。
385387
386388{% highlight bash %}
387389
388- /path/to/moduleA $ npm link
390+ src/myModule $ npm link
389391
390392{% endhighlight %}
391393
392- 上面的命令会在npm的安装目录内 ,生成一个符号链接文件。
394+ 上面的命令会在npm的全局模块目录内(比如/usr/local/lib/node_modules/) ,生成一个符号链接文件,该文件的名字就是package.json文件中指定的文件名 。
393395
394396{% highlight bash %}
395397
396- /usr/local/share/npm/ lib/node_modules/moduleA -> /path/to/moduleA
398+ /usr/local/lib/node_modules/myModule -> src/myModule
397399
398400{% endhighlight %}
399401
400- 然后,转到你需要放置该模块的项目目录 ,再次运行npm link命令,并指定模块名。
402+ 然后,切换到你需要放置该模块的项目目录 ,再次运行npm link命令,并指定模块名。
401403
402404{% highlight bash %}
403405
404- /path/to/my-project $ npm link moduleA
406+ src/myProject $ npm link myModule
405407
406408{% endhighlight %}
407409
408410上面命令等同于生成了本地模块的符号链接。
409411
410412{% highlight bash %}
411413
412- /path/to/my-project/ node_modules/moduleA -> /usr/local/share/npm/ lib/node_modules/moduleA
414+ src/myProject/ node_modules/myModule -> /usr/local/lib/node_modules/myModule
413415
414416{% endhighlight %}
415417
416418然后,就可以在你的项目中,加载该模块了。
417419
418420{% highlight javascript %}
419421
420- require('moduleA')
422+ var myModule = require('myModule');
421423
422424{% endhighlight %}
423425
426+ 这样一来,myModule的任何变化,都可以直接在myProject中调用。但是,同时也出现了风险,任何在myProject目录中对myModule,都会反映到模块的源码中。
427+
428+ npm link命令有一个简写形式,显示连接模块的本地目录。
429+
430+ ``` javascript
431+
432+ src/ myProject$ npm link ../ myModule
433+
434+ ```
435+
436+ 上面的命令等同于下面几条命令。
437+
438+ ``` javascript
439+
440+ src/ myProject$ cd ../ myModule
441+ src/ myModule$ npm link
442+ src/ myModule$ cd ../ myProject
443+ src/ myProject$ npm link myModule
444+
445+ ```
446+
424447如果你的项目不再需要该模块,可以在项目目录内使用npm unlink命令,删除符号链接。
425448
426449{% highlight bash %}
427450
428- /path/to/my-project $ npm unlink moduleA
451+ src/myProject $ npm unlink myModule
429452
430453{% endhighlight %}
431454
455+ 一般来说,npm公共模块都安装在系统目录(比如/usr/local/lib/),普通用户没有写入权限,需要用到sudo命令。这不是很方便,我们可以在没有root的情况下,用好npm。
456+
457+ 首先在主目录下新建配置文件.npmrc,然后在该文件中将prefix变量定义到主目录下面。
458+
459+ ``` bash
460+ prefix = /home/yourUsername/npm
461+ ```
462+
463+ 然后在主目录下新建npm子目录。
464+
465+ ``` bash
466+ $ mkdir ~ /npm
467+ ```
468+
469+ 此后,全局安装的模块都会安装在这个子目录中,npm也会到` ~/npm/bin ` 目录去寻找命令。因此,` npm link ` 就不再需要
470+ root权限了。
471+
472+ 最后,将这个路径在.bash_profile文件(或.bashrc文件)中加入PATH变量。
473+
474+ ``` bash
475+ export PATH=~ /npm/bin:$PATH
476+ ```
477+
432478## npm publish
433479
434480在发布你的模块之前,需要先设定个人信息。
@@ -523,3 +569,4 @@ npm publish
523569
524570- James Halliday, [ task automation with npm run] ( http://substack.net/task_automation_with_npm_run ) : npm run命令(package.json文件的script属性)的用法
525571- Keith Cirkel, [ How to Use npm as a Build Tool] ( http://blog.keithcirkel.co.uk/how-to-use-npm-as-a-build-tool/ )
572+ - justjs, [ npm link: developing your own npm modules without tears] ( http://justjs.com/posts/npm-link-developing-your-own-npm-modules-without-tears )
0 commit comments