angular-cli: ng serve => Error: EPERM: operation not permitted, symlink

I am filing a bug.

  1. OS. Windows 7

  2. Versions. ng --version angular-cli: 0.0.39 node: 4.4.3 os: win32 x64

    node --version
    

    v4.4.3 npm --version 3.8.6 npm info angular-cli { name: ‘angular-cli’, time: { modified: ‘2016-05-04T16:29:23.054Z’, created: ‘2014-10-07T04:34:38.078Z’, ‘1.0.0’: ‘2014-10-07T04:34:38.078Z’, ‘0.0.0’: ‘2014-10-11T11:38:24.914Z’, ‘0.0.1’: ‘2015-08-03T17:12:04.553Z’, ‘0.0.2’: ‘2015-10-18T17:46:40.146Z’, ‘0.0.3’: ‘2015-10-18T21:42:52.445Z’, ‘0.0.4’: ‘2015-10-19T01:14:13.216Z’, ‘0.0.5’: ‘2015-10-19T09:14:01.712Z’, ‘0.0.6’: ‘2015-10-19T09:36:51.644Z’, ‘0.0.7’: ‘2015-10-19T11:48:24.233Z’, ‘0.0.8’: ‘2015-10-19T11:51:59.318Z’, ‘0.0.9’: ‘2015-10-19T21:18:13.725Z’, ‘0.0.10’: ‘2015-10-19T22:18:13.091Z’, ‘0.0.11’: ‘2015-11-03T05:03:06.345Z’, ‘0.0.12’: ‘2015-11-15T10:10:48.551Z’, ‘0.0.13’: ‘2015-12-04T17:16:43.662Z’, ‘0.0.14’: ‘2015-12-05T01:40:39.377Z’, ‘0.0.15’: ‘2015-12-05T05:50:59.226Z’, ‘0.0.16’: ‘2015-12-10T12:23:28.722Z’, ‘0.0.17’: ‘2015-12-14T19:37:08.400Z’, ‘0.0.18’: ‘2015-12-15T12:51:47.990Z’, ‘0.0.19’: ‘2015-12-15T18:23:33.077Z’, ‘0.0.20’: ‘2015-12-15T20:39:55.357Z’, ‘0.0.22’: ‘2016-02-20T00:36:56.908Z’, ‘0.0.23’: ‘2016-02-20T01:44:13.897Z’, ‘0.0.24’: ‘2016-02-25T17:41:20.619Z’, ‘0.0.25’: ‘2016-03-10T02:10:05.410Z’, ‘0.0.26’: ‘2016-03-23T00:39:46.402Z’, ‘0.0.27’: ‘2016-03-23T22:05:56.538Z’, ‘0.0.28’: ‘2016-03-28T22:39:45.766Z’, ‘0.0.29’: ‘2016-03-30T18:10:47.060Z’, ‘0.0.30’: ‘2016-04-06T22:27:32.015Z’, ‘0.0.31’: ‘2016-04-11T18:20:32.677Z’, ‘0.0.33’: ‘2016-04-19T22:31:48.209Z’, ‘0.0.34’: ‘2016-04-26T17:56:20.524Z’, ‘0.0.37’: ‘2016-05-03T18:49:21.731Z’, ‘0.0.39’: ‘2016-05-04T16:29:23.054Z’ }, maintainers: [ ‘angularcore angular-core+npm@google.com’, ‘rodyhaddad npm@rodyhaddad.com’ ], description: ‘CLI tool for Angular’, versions: [ ‘0.0.0’, ‘0.0.1’, ‘0.0.2’, ‘0.0.3’, ‘0.0.4’, ‘0.0.5’, ‘0.0.6’, ‘0.0.7’, ‘0.0.8’, ‘0.0.9’, ‘0.0.10’, ‘0.0.11’, ‘0.0.12’, ‘0.0.13’, ‘0.0.14’, ‘0.0.15’, ‘0.0.16’, ‘0.0.17’, ‘0.0.18’, ‘0.0.19’, ‘0.0.20’, ‘0.0.22’, ‘0.0.23’, ‘0.0.24’, ‘0.0.25’, ‘0.0.26’, ‘0.0.27’, ‘0.0.28’, ‘0.0.29’, ‘0.0.30’, ‘0.0.31’, ‘0.0.33’, ‘0.0.34’, ‘0.0.37’, ‘0.0.39’ ], ‘dist-tags’: { latest: ‘0.0.39’ }, readmeFilename: ‘README.md’, homepage: ‘https://github.com/angular/angular-cli’, keywords: [], repository: { type: ‘git’, url: ‘git+https://github.com/angular/angular-cli.git’ }, author: ‘Angular Authors’, bugs: { url: ‘https://github.com/angular/angular-cli/issues’ }, license: ‘MIT’, contributors: [ ‘Rody Haddad npm@rodyhaddad.com (http://rodyhaddad.com/)’, ‘Igor Minar igor@angularjs.org’ ], users: { altrim: true, seachange: true }, version: ‘0.0.39’, main: ‘lib/cli/index.js’, trackingCode: ‘UA-8594346-19’, bin: { ng: ‘./bin/ng’ }, scripts: { test: ‘node tests/runner’, lint: ‘eslint .’ }, engines: { node: ‘>= 4.1.0’ }, dependencies: { broccoli: ‘^1.0.0-beta.7’, ‘broccoli-caching-writer’: ‘^2.2.1’, ‘broccoli-concat’: ‘^2.2.0’, ‘broccoli-funnel’: ‘^1.0.1’, ‘broccoli-merge-trees’: ‘^1.1.1’, ‘broccoli-source’: ‘^1.1.0’, ‘broccoli-writer’: ‘^0.1.1’, chalk: ‘^1.1.3’, ‘ember-cli’: ‘2.5.0’, ‘ember-cli-string-utils’: ‘^1.0.0’, exit: ‘^0.1.2’, ‘fs-extra’: ‘^0.30.0’, glob: ‘^7.0.3’, leek: ‘0.0.21’, lodash: ‘^4.11.1’, opn: ‘4.0.1’, resolve: ‘^1.1.7’, shelljs: ‘^0.7.0’, ‘silent-error’: ‘^1.0.0’, ‘symlink-or-copy’: ‘^1.0.3’, ‘systemjs-builder’: ‘^0.15.16’, typescript: ‘^1.8.10’, typings: ‘^0.8.1’ }, ‘ember-addon’: { paths: [ ‘./addon/ng2/’ ] }, devDependencies: { chai: ‘^3.5.0’, ‘clang-format’: ‘^1.0.38’, eslint: ‘^2.8.0’, ‘exists-sync’: ‘0.0.3’, minimatch: ‘^3.0.0’, mocha: ‘^2.4.5’, ‘mock-fs’: ‘^3.8.0’, ‘object-assign’: ‘^4.0.1’, rewire: ‘^2.5.1’, sinon: ‘^1.17.3’, through: ‘^2.3.8’, tslint: ‘^3.8.1’, ‘walk-sync’: ‘^0.2.6’ }, gitHead: ‘8a15f90ccc6783196069325cd9249326424275b0’, dist: { shasum: ‘89f55716f31a6e517f6404a6fd7f360292c893ed’, tarball: ‘https://registry.npmjs.org/angular-cli/-/angular-cli-0.0.39.tgz’ }, directories: {} }

  3. Repro steps. ng new angular2-cli-test cd angular2-cli-test ng serve

  4. The log given by the failure. Normally this include a stack trace and some more information.

c:\Workspaces\angular2-cli-test>ng serve

Running without elevated rights. Running Ember CLI “as Administrator” increases performance significantly. See ember-cli.com/user-guide/#windows for details.

Livereload server on http://localhost:49154 Serving on http://localhost:4200/ The Broccoli Plugin: [BroccoliTypeScriptCompiler] failed with: Error: EPERM: operation not permitted, symlink ‘c:\Workspaces\angular2-cli-test\tmp\broccoli_type_script_compiler-cache_path-EyQJV SXC.tmp\src\app\angular2-cli-test.component.spec.js.map’ -> ‘c:\Workspaces\angular2-cli-test\tmp\broccoli_type_script_compiler-out put_path-C73bxA1u.tmp\src\app\angular2-cli-test.component.spec.js.map’

  1. Mention any other details that might be useful. I’m on Win 7 … no admin rights … and I will never get admin rights due to the security restrictions in the company.

About this issue

  • Original URL
  • State: closed
  • Created 8 years ago
  • Comments: 26 (6 by maintainers)

Most upvoted comments

You guys need to run ng serve inside a cmd with administrator privileges. or whatever comandline you use, but with admin rights.

no admin rights … and I will never get admin rights due to the security restrictions/policy in the company.

+1 Sadly this makes it impossible to use at work for a lot of people.

We solved this issue for us using this little patch of file angular-cli/lib/broccoli/broccoli-typescript.js in line 206:

try {
  fs.symlinkSync(absoluteFilePath, outputFilePath);
} catch(e) {
  const conentStr = fs.readFileSync(absoluteFilePath);
  fs.writeFileSync(outputFilePath, conentStr);
}

It runs little slower than creating symlink, but still it’s totally fine for us. Probably one can also use a more performing way for synchronous copying files using node (?).

i had the same error and i fixed that just by running the command line as Administrator

this is very sad… admin rights are not possible in corporate environments. maybe this whole thing is made for startups where they have all sorts of rights 😃