npm工作时,node和nodejs命令不执行任何操作

时间:2018-08-19 05:57:53

标签: node.js

我正在学习NodeJS,我使用- (NSTextStorage *)textStorage { if (!_textStorage) { _textStorage = [[NSTextStorage alloc] init]; [_textStorage addLayoutManager:self.layoutManager]; [self.layoutManager setTextStorage:_textStorage]; } return _textStorage; } - (NSTextContainer *)textContainer { if (!_textContainer) { _textContainer = [[NSTextContainer alloc] init]; _textContainer.lineFragmentPadding = 0; _textContainer.maximumNumberOfLines = self.numberOfLines; _textContainer.lineBreakMode = self.lineBreakMode; _textContainer.widthTracksTextView = YES; _textContainer.size = self.frame.size; [_textContainer setLayoutManager:self.layoutManager]; } return _textContainer; } - (NSLayoutManager *)layoutManager { if (!_layoutManager) { // Create a layout manager for rendering _layoutManager = [[PRYLayoutManager alloc] init]; _layoutManager.delegate = self; [_layoutManager addTextContainer:self.textContainer]; } return _layoutManager; } - (void)layoutSubviews { [super layoutSubviews]; // Update our container size when the view frame changes self.textContainer.size = self.bounds.size; } - (void)setFrame:(CGRect)frame { [super setFrame:frame]; CGSize size = frame.size; size.width = MIN(size.width, self.preferredMaxLayoutWidth); size.height = 0; self.textContainer.size = size; } - (void)setBounds:(CGRect)bounds { [super setBounds:bounds]; CGSize size = bounds.size; size.width = MIN(size.width, self.preferredMaxLayoutWidth); size.height = 0; self.textContainer.size = size; } - (void)setPreferredMaxLayoutWidth:(CGFloat)preferredMaxLayoutWidth { [super setPreferredMaxLayoutWidth:preferredMaxLayoutWidth]; CGSize size = self.bounds.size; size.width = MIN(size.width, self.preferredMaxLayoutWidth); self.textContainer.size = size; } - (CGRect)textRectForBounds:(CGRect)bounds limitedToNumberOfLines:(NSInteger)numberOfLines { // Use our text container to calculate the bounds required. First save our // current text container setup CGSize savedTextContainerSize = self.textContainer.size; NSInteger savedTextContainerNumberOfLines = self.textContainer.maximumNumberOfLines; // Apply the new potential bounds and number of lines self.textContainer.size = bounds.size; self.textContainer.maximumNumberOfLines = numberOfLines; // Measure the text with the new state CGRect textBounds; @try { NSRange glyphRange = [self.layoutManager glyphRangeForTextContainer:self.textContainer]; textBounds = [self.layoutManager boundingRectForGlyphRange:glyphRange inTextContainer:self.textContainer]; // Position the bounds and round up the size for good measure textBounds.origin = bounds.origin; textBounds.size.width = ceilf(textBounds.size.width); textBounds.size.height = ceilf(textBounds.size.height); } @finally { // Restore the old container state before we exit under any circumstances self.textContainer.size = savedTextContainerSize; self.textContainer.maximumNumberOfLines = savedTextContainerNumberOfLines; } return textBounds; } - (void)setAttributedText:(NSAttributedString *)attributedText { // Pass the text to the super class first [super setAttributedText:attributedText]; [self.textStorage setAttributedString:attributedText]; } - (CGPoint)_textOffsetForGlyphRange:(NSRange)glyphRange { CGPoint textOffset = CGPointZero; CGRect textBounds = [self.layoutManager boundingRectForGlyphRange:glyphRange inTextContainer:self.textContainer]; CGFloat paddingHeight = (self.bounds.size.height - textBounds.size.height) / 2.0f; if (paddingHeight > 0) { textOffset.y = paddingHeight; } return textOffset; } - (void)drawTextInRect:(CGRect)rect { // Calculate the offset of the text in the view CGPoint textOffset; NSRange glyphRange = [self.layoutManager glyphRangeForTextContainer:self.textContainer]; textOffset = [self _textOffsetForGlyphRange:glyphRange]; // Drawing code [self.layoutManager drawBackgroundForGlyphRange:glyphRange atPoint:textOffset]; // for debugging the following 2 line should produce the same results [self.layoutManager drawGlyphsForGlyphRange:glyphRange atPoint:textOffset]; //[super drawTextInRect:rect]; } 编写了一个脚本。当我运行express-generator时,效果很好:

npm start app.js

但是,如果我尝试使用root@server:~ $ npm start app.js > nodejs@0.0.0 start /root/nodejs > node ./bin/www "app.js" node,则根本不起作用:

nodejs

以下是我使用的版本:

root@server:~ $ node app.js 
root@server:~ $ node app
root@server:~ $ nodejs app.js 
root@server:~ $ nodejs app
root@server:~ $

为什么不起作用?

2 个答案:

答案 0 :(得分:1)

对于使用express-generator创建的快速项目,此命令将运行node ./bin/www而不是node app.js。在package.json中,您将看到"scripts": {"start": "node ./bin/www"},该项目以npm start开始。默认情况下,只有node命令可在终端/ CMD上运行,就像node --versionnodejs一样。 npmnode package manager,在系统上安装nodejs时会被安装。 npm --version将显示npm版本

答案 1 :(得分:0)

请检查您的package.json。启动项目的默认命令是"start"

"scripts": {
    "start": "node ./bin/www"

尽管用于node -v的命令是用于节点应用程序的,与项目无关,但我的意思是与项目的脚本有关。

如果可能,请检查此npm start vs node app.js

您应该经历https://developer.mozilla.org/en-US/docs/Learn/Server-side/Express_Nodejs

是Mozilla的开发指南。它将使您更好地理解与表达有关的概念。