升级到节点7后找不到模块'internal/fs'

ale*_*cxe 53 javascript node.js npm gruntjs bower

我们最近尝试在构建服务器上升级到节点v7.0.0,但在"bower_concat"步骤中应用程序构建任务失败时开始出现问题:

Loading "bower-concat.js" tasks...ERROR
Error: Cannot find module 'internal/fs'
Run Code Online (Sandbox Code Playgroud)

我们安装了什么:

  • nodev7.0.0(通过yum "nodesource"存储库安装)
  • npm 4.0.1
  • 使用grunt(如果这是相关的)
  • grunt-bower-concat 0.6.0

grunt构建任务配置:

grunt.registerTask(
    'build:prod', [
        'clean:prod',
        'copy:prod',
        'replace',
        'bower_concat',
        'ngtemplates',
        'concat',
        'uglify',
        'cssmin',
        'injector:prod',
        'copy:cssfix',
        'copy:dist',
        'bowercopy:dist',
        'bowercopy:fonts',
        'template:setProdVersion'
    ]
);
Run Code Online (Sandbox Code Playgroud)

而咕噜咕噜的bower_concat任务:

bower_concat: {
    all: {
        dest: '<%= app.build %>/bower.js',
        cssDest: '<%= app.build %>/bower.css',
        dependencies: {
            'bootstrap': 'jquery'
        },
        mainFiles: {
            "angular-app-modules": [
                "app/dist/angular-app-modules.min.js",
                "app/dist/angular-app-modules.min.css"
            ]
        }
    }
}, 
Run Code Online (Sandbox Code Playgroud)

请注意,它在节点v6.9.0上没有任何问题.

什么可能导致这个问题?我们可以在不降级到节点v6的情况下解决问题吗?


还有这个相关的问题,但是,截至目前,那里的信息对我们的案例没有帮助.

Al-*_*far 58

首先,以管理员身份打开控制台(sudo如果是Linux ,则打开终端),然后:

npm cache clean
Run Code Online (Sandbox Code Playgroud)

对于npm 5及更高版本

npm cache clean --force
Run Code Online (Sandbox Code Playgroud)

编辑:

对于Windows,您可能无法清除缓存,因此您可以通过删除以下所有文件夹内容来手动删除缓存:

C:\Users\<USER-NAME>\AppData\Roaming\npm-cache
Run Code Online (Sandbox Code Playgroud)

感谢"superwf",这种情况可能会发生在一些人身上,但我从来没有这样做过(可能是因为我的安全级别最低?!).

结束编辑.


然后返回到正常的控制台(不是管理员或root用户),返回到package.json所在的项目目录,然后node_modules从项目中删除该文件夹,将其完全删除,然后在项目文件夹中再次安装节点模块:

npm install
Run Code Online (Sandbox Code Playgroud)

在重新安装模块之前,可能需要更新模块.我建议这样做,但如果模块中有任何重大版本更改,请小心更改.此模块npm-check-updates可以帮助您检查最新版本并更新它们.

此外,您可能还需要安装最新的全局模块,通过以下方式检查更新:

ncu -g
Run Code Online (Sandbox Code Playgroud)

要么

npm outdated -g
Run Code Online (Sandbox Code Playgroud)

如果您仍然卡住,则可能需要删除全局node_modules文件夹并重新安装所需内容.


编辑:

纱线选项:有些人即使使用清理程序也会遇到相同的问题,实际上你使用Yarn可以节省很多时间.就我个人而言,我开始使用yarn而不是传统npm i,我可以保证它更快,并节省你的时间,你的头脑从npm头痛.


cyb*_*bat 19

在我的情况下清除缓存(OSX)不起作用.我n用来管理npm可能导致过期的节点.根据n个文档,您可以更新npm:

curl -0 -L https://npmjs.org/install.sh | sudo sh
Run Code Online (Sandbox Code Playgroud)


小智 14

在linux中,当我更新到节点7时,发生这种情况,"npm cache clean"确实有效.

在windows中,npm cache clean也会生成

错误:找不到模块'internal/fs'

只需删除

C:\用户[用户名] \应用程序数据\漫游\ NPM

C:\用户[用户名] \应用程序数据\漫游\ NPM-缓存

解决了


Abh*_*der 11

在我的情况下清除缓存不起作用.下面是我的初始状态以及我如何解决这个问题:

node -v v7.4.0
npm -v 4.0.5
Run Code Online (Sandbox Code Playgroud)

通过执行以下操作并使用n manager解决了这个问题:

$ sudo n 6.9.1
$ sudo npm -g install npm@next
$ sudo n stable
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助!


ryn*_*nop 6

我使用n工具来管理节点(和捆绑的npm)版本之间的切换.

要修复此错误,我只需从全局空间(macOS)中删除npm: sudo rm -rf /usr/local/lib/node_modules/npm

然后我重新跑了最新的sudo.这将重新安装npm.切换回以前版本的节点时,只需运行sudo n 4.3.2.

总结一下:

> sudo rm -rf /usr/local/lib/node_modules/npm
> sudo n latest
> node --version
v7.7.1
> npm --version
4.1.2
> sudo n 4.3.2
> npm --version
2.14.12
Run Code Online (Sandbox Code Playgroud)