标尺服务不作为本地依赖项工作
Ruler service not working as local dependency
我的代码基于这个插件:http://plnkr.co/edit/81nWDyreYMzkunihfRgX?p=preview
如您所见,正在远程加载依赖项(带有 http/s 的脚本),然后我使用节点更改它们并在本地用 package.json 和 tsconfig.json 替换所有依赖项。
但是,当像这样将标尺和矩形依赖项更改为本地时:
import {Ruler, Rectangle} from "angular2/src/platform/browser/ruler";
出现错误提示:
"SyntaxError: expected expression, got '<'
Evaluating http://localhost:3000/angular2/src/platform/browser/ruler
Error loading http://localhost:3000/src/main.ts" angular2-polyfills.js:138:14
SyntaxError: expected expression, got '<'
我假设您正在从包中导入 Angular2:
angular2.min.js or ( angular.js | angular.dev.js )
我检查文件:./node_modules/angular2/bundles/overview.md
你会看到 angular2 由以下部分组成:
- angular2/core
- angular2/common
- angular2/compiler
- angular2/platform/browser
- angular2/platform/common_dom
- angular2/instrumentation
没有 src/ 文件夹!
如果您想在您的应用程序中导入 angular2/src/platform/browser/ruler
,您必须将 node_modules/angular2
文件夹提供给您的应用程序,这次没有捆绑包!
如果您使用的是 SystemJS,请考虑以下配置:
System.config({
defaultJSExtensions: true,
map: {
"app": './src',
"angular2": 'node_modules/angular2',
'rxjs/operator/*' : 'node_modules/rxjs/add/operator/*',
"rxjs": 'node_modules/rxjs',
"reflect-metadata": 'node_modules/reflect-metadata/temp/Reflect.js',
"zone.js": 'node_modules/zone.js/dist/zone.js'
},
packages: {
app: {
defaultExtension: 'js',
format: 'register'
},
angular2: {
defaultExtension: 'js',
},
rxjs: {
defaultExtension: 'js'
},
'reflect-metadata': {
format: 'global'
}
}
});
node_modules 文件夹可公开访问!
您只需在您的 SystemJS 配置中添加这一行:
<script src="node_modules/angular2/bundles/angular2-polyfills.js"></script>
<script src="node_modules/systemjs/dist/system.src.js"></script>
<script src="node_modules/rxjs/bundles/Rx.js"></script>
<script src="node_modules/angular2/bundles/angular2.dev.js"></script>
(...)
<script>
System.config({
packages: {
app: {
format: 'register',
defaultExtension: 'js'
}
},
map: {
'angular2/src/platform/browser/ruler': 'node_modules/angular2/src/platform/browser/ruler.js'
}
});
System.import('app/boot')
.then(null, console.error.bind(console));
</script>
你在使用import时就有了相应的对象:
import {Ruler} from 'angular2/src/platform/browser/ruler';
console.log(Ruler);
// print: Ruler(domAdapter) {
// this.domAdapter = domAdapter;
// }
希望对你有帮助,
蒂埃里
https://github.com/angular/angular/pull/8452#issuecomment-220460761
mhevery commented 12 days ago
We have decided to remove Ruler service, and so it is not part of the public API.
我的代码基于这个插件:http://plnkr.co/edit/81nWDyreYMzkunihfRgX?p=preview
如您所见,正在远程加载依赖项(带有 http/s 的脚本),然后我使用节点更改它们并在本地用 package.json 和 tsconfig.json 替换所有依赖项。
但是,当像这样将标尺和矩形依赖项更改为本地时:
import {Ruler, Rectangle} from "angular2/src/platform/browser/ruler";
出现错误提示:
"SyntaxError: expected expression, got '<'
Evaluating http://localhost:3000/angular2/src/platform/browser/ruler
Error loading http://localhost:3000/src/main.ts" angular2-polyfills.js:138:14
SyntaxError: expected expression, got '<'
我假设您正在从包中导入 Angular2:
angular2.min.js or ( angular.js | angular.dev.js )
我检查文件:./node_modules/angular2/bundles/overview.md
你会看到 angular2 由以下部分组成:
- angular2/core
- angular2/common
- angular2/compiler
- angular2/platform/browser
- angular2/platform/common_dom
- angular2/instrumentation
没有 src/ 文件夹!
如果您想在您的应用程序中导入 angular2/src/platform/browser/ruler
,您必须将 node_modules/angular2
文件夹提供给您的应用程序,这次没有捆绑包!
如果您使用的是 SystemJS,请考虑以下配置:
System.config({
defaultJSExtensions: true,
map: {
"app": './src',
"angular2": 'node_modules/angular2',
'rxjs/operator/*' : 'node_modules/rxjs/add/operator/*',
"rxjs": 'node_modules/rxjs',
"reflect-metadata": 'node_modules/reflect-metadata/temp/Reflect.js',
"zone.js": 'node_modules/zone.js/dist/zone.js'
},
packages: {
app: {
defaultExtension: 'js',
format: 'register'
},
angular2: {
defaultExtension: 'js',
},
rxjs: {
defaultExtension: 'js'
},
'reflect-metadata': {
format: 'global'
}
}
});
node_modules 文件夹可公开访问!
您只需在您的 SystemJS 配置中添加这一行:
<script src="node_modules/angular2/bundles/angular2-polyfills.js"></script>
<script src="node_modules/systemjs/dist/system.src.js"></script>
<script src="node_modules/rxjs/bundles/Rx.js"></script>
<script src="node_modules/angular2/bundles/angular2.dev.js"></script>
(...)
<script>
System.config({
packages: {
app: {
format: 'register',
defaultExtension: 'js'
}
},
map: {
'angular2/src/platform/browser/ruler': 'node_modules/angular2/src/platform/browser/ruler.js'
}
});
System.import('app/boot')
.then(null, console.error.bind(console));
</script>
你在使用import时就有了相应的对象:
import {Ruler} from 'angular2/src/platform/browser/ruler';
console.log(Ruler);
// print: Ruler(domAdapter) {
// this.domAdapter = domAdapter;
// }
希望对你有帮助, 蒂埃里
https://github.com/angular/angular/pull/8452#issuecomment-220460761
mhevery commented 12 days ago We have decided to remove Ruler service, and so it is not part of the public API.